Express无法上传文件,req.files未定义

我真的很抱歉,如果我遗漏了一些东西,而且完全是愚蠢的,但是我已经多次检查和检查了,file uploadfunction在这里没有工作。 我做了一个超级最小的应用程序来展示。 刚刚生成了最新版本(3.4.7)的新快递应用程序,并添加了至less我可以使file upload工作。

这是我的app.js文件

/** * Module dependencies. */ var express = require('express'); var http = require('http'); var path = require('path'); var app = express(); // all environments app.set('port', process.env.PORT || 3000); app.set('views', path.join(__dirname, 'views')); app.set('view engine', 'jade'); app.use(express.favicon()); app.use(express.logger('dev')); app.use(express.json()); app.use(express.urlencoded()); app.use(express.methodOverride()); app.use(app.router); app.use(express.static(path.join(__dirname, 'public'))); // development only if ('development' == app.get('env')) { app.use(express.errorHandler()); } app.get('/tasks', function(req, res) { res.render('form'); }); app.post('/tasks', function(req, res) { console.log(req.files); res.send('ok'); }); http.createServer(app).listen(app.get('port'), function(){ console.log('Express server listening on port ' + app.get('port')); }); exports = module.exports = app; 

这里是我的form.jade视图文件:

 doctype html html head title Task Upload body form(action='/tasks', method='post', enctype='multipart/form-data') input(name='task', type='file') input(type='submit') 

每次我尝试上传一个文件, req.files注销undefined 。 任何人都可以救我从这个问题?

在app.js中添加以下内容

 app.configure(function(){ app.use(express.methodOverride()); app.use(express.bodyParser({keepExtensions:true,uploadDir:path.join(__dirname,'/files'})); }); 

然后尝试访问如下;

 req.files.task 

build议不要使用bodyParser,而是简单地定义你想要的处理types。 你的情况,因为它的file upload,你可以启用它如下

  app.configure(function(){ app.use(express.methodOverride()); app.use(express.multipart()); }); 

你可以阅读为什么在下面的链接中使用bodyParser()不是一个好主意。

http://andrewkelley.me/post/do-not-use-bodyparser-with-express-js.html

Express 4中 ,默认情况下, req对象上的req.files不再可用。 要访问req.files对象中的上传文件,请使用busboy,multer,强大,多方,连接多方等多部分处理中间件。