无法在Nodejs中执行fileupload程序
我有一个简单的程序,我试图从在线教程在http://www.tutorialspoint.com/nodejs/nodejs_express_framework.htm执行,但我收到一个exception,如下所示:
我对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) });
它看起来像一个男人的API已经改变。 由于本教程使用npm install multer --save
最新版本,而不是确保版本兼容。 有关如何使用它的详细信息可以在npm页面find。 看来您现在需要将特定的中间件添加到特定的路由中:
// 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
将其添加到所有路由中,但是您肯定需要将其更改为使用upload.single(或者他们select的其他中间件)。
这里是我比较不同于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:ENOENT:no such file or directory,open'C:\ tmp \ ce194372b624b45f2c881140fecad07f'at Error(native)”您应该在根path中创buildtmp文件夹以保存临时文件。 在我的情况下是“c:\ tmp”,“ce194372b624b45f2c881140fecad07f”是临时文件。 file upload成功后应删除。
- 具有socket.io的单页应用程序中特定于部分的侦听器
- expression通配符规则
- 使用React Router 4进行服务器端渲染时,上下文为未定义
- 我的第一个Node.js服务器:无法加载资源:net :: ERR_INCOMPLETE_CHUNKED_ENCODING
- 为什么使用Bower.js如果npm工作正常?
- 在SPA(单页面应用程序)中使用node.js + express.js在服务器端dynamic生成内容的SEO
- 如何在没有Cookie的情况下在SPA中使用第三方authentication服务?
- 在服务器和客户端上渲染Backbone.js应用程序
- 预期的响应包含一个数组,但有一个对象