1

我正在使用最新版本的 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')

应用程序.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
});
4

3 回答 3

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 文件。如果不是,那么您的路线就有问题。

于 2013-02-26T11:49:31.517 回答
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);
  });
}
于 2013-02-26T10:39:05.167 回答
1

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

感谢你的帮助。

于 2013-02-28T17:10:59.387 回答