2011-11-21 44 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