Node.js express 3.0 bodyParser工作不正常

Node.js express 3.0 bodyParser工作不正常,node.js,express,connect,Node.js,Express,Connect,我正在使用最新版本的express no.3。我已经阅读了文档,并且完全按照写的那样做了,但它仍然没有按照预期工作。提交后,我在上传目录中获得了文件,但随后一切都停止了,app.post的回调函数也没有启动。守则: HTML-JADE form(action="/upload", method="post", enctype="multipart/form-data") input(type="file", name="image") input(type='submit', value

我正在使用最新版本的express no.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
});

您需要在读取数据后返回响应。如果不返回响应,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);
  });
}

您需要在读取数据后返回响应。如果不返回响应,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);
  });
}

尝试向用户发送一个简单的响应

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
}
在我知道您遇到了什么错误之前,我不能说太多,因为文件正在上载到upload dir
bodyParser
工作正常。可能您的路线正在由另一个功能处理,或者根本没有处理
app.router
是调用回调的代码


当您执行app.get('/upload',函数(req,res){…})时路由器实际调用回调函数来处理请求。你能确认你是否能做app.get('/upload',…)html jade文件成功。如果没有,则说明路由中存在问题。

尝试向用户发送简单响应

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
}
在我知道您遇到了什么错误之前,我不能说太多,因为文件正在上载到upload dir
bodyParser
工作正常。可能您的路线正在由另一个功能处理,或者根本没有处理
app.router
是调用回调的代码


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

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


谢谢大家的帮助。

我终于找到了解决方案——这是因为我使用了node 0.9.6-pre。更改为0.8.21后,一切正常



谢谢大家的帮助。

收到文件后,它看起来停止了-根本不执行app.post中的函数。我已经更新了答案。应该首先完全读取上传内容,并且在firefox发送所有数据之前不应发送响应代码。是否命中了你的console.log语句?还是一样-没有发生任何事情我尝试了你的github版本,但无法在chrome或mac上的firefox上复制,因此可能与浏览器相关或节点相关版本相关。顺便说一句,如果有人对两个答案都投了反对票,那么最好能得到一个解释。看起来在收到文件后,它停止了-根本不执行app.post中的函数。我已经更新了我的答案。应该首先完全读取上传内容,并且在firefox发送所有数据之前不应发送响应代码。是否命中了你的console.log语句?还是一样-没有发生任何事情我尝试了你的github版本,但无法在chrome或mac上的firefox上复制,因此可能与浏览器相关或节点相关版本相关。顺便说一句,如果能为两个答案都投了反对票的人找到一个解释,那就太好了。它会上传文件,但什么都不做——没有colsole日志,什么都不写——提交后浏览器很忙——就像在搜索一样。当我使用postman并发送简单的post-req时,它可以工作,但对于文件anbd-form-noStackoverflow并不是调试任何人代码的热线服务。我会要求选民在投票前自己提供一个解决方案,或者至少解释他们的投票。在试图自己解决问题之前,尽量不要评判别人。这对OP或访问此页面的任何人都没有帮助。它上载文件,但不执行任何操作-没有colsole日志,没有写入任何内容-提交后浏览器很忙-就像搜索某些内容一样。当我使用postman并发送简单的post-req时,它可以工作,但对于文件anbd-form-noStackoverflow并不是调试任何人代码的热线服务。我会要求选民在投票前自己提供一个解决方案,或者至少解释他们的投票。在试图自己解决问题之前,尽量不要评判别人。这对OP或访问此页面的任何人都没有帮助使用节点0.9.6有什么问题??我也有同样的问题。谢谢你,老兄。在花了2天时间调试这个问题并搜索问题之后,我找到了这个线程。现在,我转到节点v0.10.16使用节点0.9.6有什么问题??我也有同样的问题。谢谢你,老兄。在花了2天时间调试这个问题并搜索问题之后,我找到了这个线程。现在,我移动到节点v0.10.16更多的现代版本要求
var-bodyparser=require('body-parser');use(bodyparser.urlencoded({extended:true}))npm安装body-parser
更现代的版本需要
var-bodyparser=require('body-parser');use(bodyparser.urlencoded({extended:true}))npm安装body解析器