2011-11-21 45 views
1

js.I我试图了解如何使用Node.js创建一个文件上传和mongodb.I我在张贴,我使用data.The代码得到超时错误是:获取超时错误时,发布数据

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

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

Error: Timeout POST /photos/new at Object._onTimeout (/home/nodeexmple/node_modules/connect-timeout/index.js:12:22) at Timer.ontimeout (timers_uv.js:84:39)

请帮忙。

回答

1

看到这个答案...

Error: parser error, 0 of 4344 bytes parsed (Node.js)

同样u可以使用req.clearTimeout()如上所述通过alessioalex建议。

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

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

希望这能解决您的问题。

1

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

很明显,在上传页面可能会采取多的是,所以你应该在你上传的路线做的是清除这样的超时:

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

了解更多关于连接超时它github page