发布数据时发生超时错误

js.I试图创build一个file upload使用node.js和mongodb.I在获取数据发送超时错误。我使用的代码是:

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

当我点击提交button时,出现以下错误。

错误:在Timer.ontimeout(timers_uv.js:84:39)处发生超时POST / photos / new Object._onTimeout(/home/nodeexmple/node_modules/connect-timeout/index.js:12:22)

请帮忙。

看到这个答案…

错误:分析器错误,parsing了4344个字节中的0个(Node.js)

另外你可以使用req.clearTimeout(),如上面alessioalex所build议的。

我相信你的代码的这部分是创造你应该避免的问题。

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

希望这可以解决你的问题。

您正在使用connect-timeout模块,以便在页面加载超过X秒(服务器端)的情况下向用户显示一条消息。

很明显,上传页面可能不止于此,所以你应该在你的上传path中做的是清除超时,如下所示:

 app.post('/photos/new', function(req, res) { req.clearTimeout(); ... 

阅读更多关于连接超时在其github页面上 。