表示3.0 bodyParser无法正常工作

我正在使用Express 3的最新版本。 我已经阅读文档,并做了完全一样的写,但它仍然不工作,因为它假设。我提交后,我的上传目录中的文件,但一切都停止,并从app.postcallback函数不会触发。 代码:

HTML玉

form(action="/upload", method="post", enctype="multipart/form-data") input(type="file", name="image") input(type='submit', value='submit') 

App.js

 var express = require('express') , user = require('./routes/user') , http = require('http') , path = require('path') , mongo = require('mongodb') , Server = mongo.Server , Db = mongo.Db , routes = require('./routes') var app = express(); app.configure(function(){ app.set('port', process.env.PORT || 3000); app.set('views', __dirname + '/views'); app.set('view engine', 'jade'); app.use(express.favicon()); app.use(express.logger('dev')); app.use(express.bodyParser({uploadDir:'./upload'})); app.use(express.methodOverride()); app.use(express.cookieParser('your secret here')); app.use(express.session()); app.use(app.router); app.use(require('stylus').middleware(__dirname + '/public')); app.use(express.static(path.join(__dirname, 'public'))); }); app.post('/upload', function(req, res) { console.log(req.files.image) // this doesn't fire at all - no matter what i write here res.send(200) //doesn't run also }); 

您需要在阅读数据后返回响应。 没有返回响应,express不知道你的响应何时完成,节点不会closures与客户端的连接。

尝试这个:

 app.post('/upload', function(req, res) { console.log(req.files.image); req.on('data', function(raw) { console.log('received data'); }); req.on('end', function() { console.log('end'); res.send(200); }); } 

尝试发送一个简单的回应给用户。

 app.post('/upload', function(req, res) { console.log(req.files.image); res.write('File Uploaded !!'); res.end(); } 

更新

你应该尝试改变格式

 app.post('/upload', function(err,req,res,next){ //Check for errors then handle it } 

直到我知道你正在得到什么错误,因为文件正在上传上传dir bodyParser工作正常,不能告诉很多。 也许你的路由正在被另一个函数处理,或者根本不处理。 app.router是调用callback的代码。

当你做app.get('/upload', function(req, res) { ... }); 实际调用callback函数来处理请求的是路由器。 你能确认你是否可以做app.get('/upload',...); html-jade文件成功。 如果不是那么你的路线有问题。

最后我find了解决scheme – 那是因为我使用了节点0.9.6 -pre。 改为0.8.21后,一切正常。

感谢你的帮助。