无法在Nodejs中执行文件上传程序
Not able to execute a fileupload program in Nodejs
我有一个简单的程序,我试图从在线教程http://www.tutorialspoint.com/nodejs/nodejs_express_framework.htm执行,但我得到一个异常如下:
我对nodejs比较陌生,任何形式的帮助或指导都将非常感激。
使用NodeJS版本:4.1.1。TypeError: app.use() requires middleware functions
at EventEmitter.use (c:'nital'my-data'my-sample-apps'nodejs'tutorialspoint-samples'node_modules'express'lib'application.js:209:11)
at Object.<anonymous> (c:'nital'my-data'my-sample-apps'nodejs'tutorialspoint-samples'Sample37.js:11:5)
at Module._compile (module.js:434:26)
at Object.Module._extensions..js (module.js:452:10)
at Module.load (module.js:355:32)
at Function.Module._load (module.js:310:12)
at Function.Module.runMain (module.js:475:10)
at startup (node.js:117:18)
at node.js:951:3
FileUploadDemo.js
var express = require('express');
var app = express();
var fs = require("fs");
var bodyParser = require('body-parser');
var multer = require('multer');
app.use(express.static('public'));
app.use(bodyParser.urlencoded({extended: false}));
app.use(multer({dest: 'C:/tmp/'}));
app.get('/upload.html', function (req, res) {
res.sendFile(__dirname + "/" + "upload.html");
});
//uploading the file here
app.post('/file_upload', function (req, res) {
console.log(req.files.file.name);
console.log(req.files.file.path);
console.log(req.files.file.type);
var file = __dirname + "/" + req.files.file.name;
fs.readFile(req.files.file.path, function (err, data) {
fs.writeFile(file, data, function (err) {
if (err) {
console.log(err);
} else {
response = {
message: 'File uploaded successfully',
filename: req.files.file.name
};
}
console.log(response);
res.end(JSON.stringify(response));
});
});
});
var server = app.listen(8081, function () {
var host = server.address().address;
var port = server.address().port;
console.log("Example app listening at http://%s:%s", host, port)
});
看起来multer的api发生了变化。由于本教程使用npm install multer --save
,因此它会引入最新版本,而不是确保您拥有的版本是兼容的。关于如何使用它的详细信息可以在npm页面上找到。看来你现在需要添加特定的中间件到特定的路由:
// Remove this line: app.use(multer({dest: 'C:/tmp/'}));
// Put this in instead
var upload = multer({ dest: 'C:/tmp/' });
// Change this: app.post('/file_upload', function (req, res) {
// to
app.post('/file_upload', upload.single('file'), function (req, res) {
虽然您可能仍然可以使用app.use
将其添加到所有路由,但您肯定需要将其更改为使用上载。单个(或其他他们选择的中间件)。
下面是我比较的与nodejs教程不同的代码。
server.js
//20160720 tested!
//[dif]:= different from http://www.tutorialspoint.com/nodejs/nodejs_express_framework.htm
var express = require('express');
var app = express();
var fs = require("fs");
var bodyParser = require('body-parser');
var multer = require('multer');
app.use(express.static('public'));
app.use(bodyParser.urlencoded({ extended: false }));
//[dif]app.use(multer({ dest: '/tmp/'}));
var upload = multer({ dest: '/tmp/'});
app.get('/index.htm', function (request, response) {response.sendFile( __dirname + "/" + "index.htm" );})
//[dif]app.post('/file_upload', function (request, response) {
app.post('/file_upload', upload.single('file'), function (request, response) {
/*[dif]
console.log(request.files.file.name);
console.log(request.files.file.path);
console.log(request.files.file.type);
var file = __dirname + "/" + request.files.file.name;
fs.readFile( request.files.file.path, function (err, data) {
[dif]*/
console.log(request.file.originalname);
console.log(request.file.path);
console.log(request.file.mimetype);
//[dif] var file = __dirname + "/" + request.file.name;
var file = __dirname + "/" + request.file.originalname;
fs.readFile( request.file.path, function (err, data) {
fs.writeFile(file, data, function (err) {
if( err ){
console.log( err );
}else{
uploadResponse = {
message:'File uploaded successfully',
//[dif] filename:request.files.file.name
filename:request.file.originalname
};
}
console.log( uploadResponse );
response.end( JSON.stringify( uploadResponse ) );
});
});
})
var server = app.listen(8081, function () {
var host = server.address().address
var port = server.address().port
console.log("Example app listening at http://%s:%s", host, port)
})
如果你得到错误- " error: enent: no such file or directory,打开'C:'tmp'ce194372b624b45f2c881140fecad07f'错误(本地)"您应该在根路径中创建tmp文件夹来保存临时文件。在我的例子中是"c:'tmp",而"ce194372b624b45f2c881140fecad07f"是临时文件。文件上传成功后,请删除。
相关文章:
- Windows8应用程序(html&Javascript):从图片库(除了文件选择器)显示图像的另一种方式
- Webpack/Rect:遵循egghead.io教程,但出现错误:您可能需要一个合适的加载程序来处理此文件类型
- java,javascript签名的小程序(文件选择,ftp上传)安全性/套接字异常
- 将文件从应用程序文件夹复制到JQM/Phonegap应用程序中的根文件夹
- 如何使用Node.js在JavaScript模块文件之间使用事件处理程序
- 如何在ExtJs4应用程序上为视图、存储和模型设置自定义文件夹名称
- 下载HTML5/Javascript MOBILE应用程序中的PDF文件
- 如何在dojo应用程序构建概要文件中加载json文件
- 如何从Node Webkit应用程序中退出外部CMD文件
- 访问离线jquery应用程序中的本地文件
- 使用angularjs和node.js时的Web应用程序文件夹结构
- 将Rails后端添加到JS/HTML/CSS应用程序时,正确的文件位置是什么
- Project和作为web应用程序发布的多个doGet()脚本文件——需要澄清
- 我如何知道js文件之间的javascript应用程序代码流
- Blueimp文件上传程序-Chrome文件夹上传限制
- 在Node Webkit应用程序中从DOM单击按钮时运行批处理文件
- 如何将 html5 画布另存为窗口 8 Metro 应用程序中的图像文件
- PHP文件没有't从Javascript应用程序获取$_POST
- HTML文件中的智能Javascript建议在Visual Studio代码更新后没有日志程序工作
- 加载Js文件应用程序加载