js.I我正在尝试使用node.js和mongodb创建文件上传。我在发布数据时遇到超时错误。我使用的代码是:
app.post('/photos/new', function(req, res) {
var photo = new Photo();
req.form.complete(function(err, fields, files) {
if(err) {
next(err);
} else {
ins = fs.createReadStream(files.file.path);
ous = fs.createWriteStream(__dirname + '/static/uploads/photos/' + files.file.filename);
util.pump(ins, ous, function(err) {
if(err) {
next(err);
} else { photos.save({
filename: files.file.filename,
file: files.file.path
}, function(error, docs) {
res.redirect('/photos');
});
}
});
//console.log('\nUploaded %s to %s', files.photo.filename, files.photo.path);
//res.send('Uploaded ' + files.photo.filename + ' to ' + files.photo.path);
}
});
});
单击提交按钮时出现以下错误。
错误:超时POST /照片/新 at Object._onTimeout(/home/nodeexmple/node_modules/connect-timeout/index.js:12:22) 在Timer.ontimeout(timers_uv.js:84:39)
请帮忙。
答案 0 :(得分:1)
您正在使用connect-timeout模块,以便在页面加载时间超过X秒(服务器端)时向用户显示一条消息。
很明显,上传页面可能需要更多,所以你在上传路线中应该做的就是清除超时:
app.post('/photos/new', function(req, res) {
req.clearTimeout();
...
在github page上了解有关connect-timeout的更多信息。
答案 1 :(得分:1)
看到这个答案......
Error: parser error, 0 of 4344 bytes parsed (Node.js)
你也可以按照alessioalex的建议使用req.clearTimeout()。
我相信你的代码部分会产生你应该避免的问题。
photos.save({
filename: files.file.filename,
file: files.file.path
}, function(error, docs) {
res.redirect('/photos');
});
而是像这样使用:
var post = new Post();
post.filename=files.file.filename;
post.file=files.file.path;
然后是这样的事情:
post.save(function(err) {
if (err)
return postCreationFailed();
req.flash('info', 'photos Succesfully Uploaded');
res.redirect('were u want to redirect');
});
希望这能解决您的问题。