express 3.0 bodyParser无法正常工作

时间:2013-02-26 10:21:05

标签: node.js express connect

我正在使用最新版的快递3号。我已经阅读了文档,并且完全按照写入的方式完成,但它仍然无法正常工作。我在提交后在上传目录中获取文件,但随后一切都停止,app.post的回调函数不会触发。代码:

HTML-JADE

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
});

3 个答案:

答案 0 :(得分:2)

您需要在读取数据后返回响应。在没有返回响应的情况下,express不知道您的响应何时完成,节点不会关闭与客户端的连接。

试试这个:

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);
  });
}

答案 1 :(得分:2)

尝试向用户发送简单回复。

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
}

在我知道你得到什么错误之前说不清楚,因为文件正在上传到上传目录bodyParser工作正常。也许你的路线正在由另一个功能处理,或根本没有处理。 app.router是调用回调的代码。

执行app.get('/upload', function(req, res) { ... });时,路由器实际上会调用回调函数来处理请求。你能否确认你是否可以成功地app.get('/upload',...); html-jade文件。如果没有,那么您的路线就会出现问题。

答案 2 :(得分:1)

最后我找到了解决方案 - 那是因为我使用了节点0.9.6 -pre。更改为0.8.21后一切正常。

感谢大家的帮助。