我正在使用最新版的快递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
});
答案 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后一切正常。
感谢大家的帮助。