【问题标题】:Getting Time-Out Error While Posting Data发布数据时出现超时错误
【发布时间】:2012-02-02 19:58:27
【问题描述】:

js。我正在尝试使用 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 /photos/new 超时 在 Object._onTimeout (/home/nodeexample/node_modules/connect-timeout/index.js:12:22) 在 Timer.ontimeout (timers_uv.js:84:39)

请帮忙。

【问题讨论】:

    标签: mongodb node.js express mongoose


    【解决方案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');
                    });
    

    希望这能解决您的问题。

    【讨论】:

      【解决方案2】:

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

      很明显,上传页面可能会占用更多时间,因此您应该在上传路由中清除超时,如下所示:

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

      在其github page 上阅读有关连接超时的更多信息。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-11-26
        • 2017-06-12
        • 1970-01-01
        • 1970-01-01
        • 2013-09-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多