发布数据时出现超时错误

时间:2011-11-21 08:53:05

标签: mongodb node.js express mongoose

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)

请帮忙。

2 个答案:

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

希望这能解决您的问题。