2014-09-01 4 views
1

С приведенным ниже кодом я могу загрузить изображение в mogodb один раз, если я попробую второй раз, я получаю сообщение об ошибке.Write after end, nodejs gridFS writeestream error

Я сделал некоторые исследования и его, потому что WriteStream закрывает NODEJS writeStream error

conn.once('open', function() { 

    var gfs = Grid(conn.db, mongoose.mongo); 

    app.post('/upload', function(req,res){ 

     form.on('part', function(part){ 
      if(!part.filename) return; 
      size = part.byteCount; 
      fileName = part.filename; 
     }); 

     form.on('file', function(name,file){ 

      var tempfile = file.path; 
      var origname = fileName; 

      var writestream = gfs.createWriteStream({ filename: origname }); 

      fs.createReadStream(tempfile).on('end', function() { 
       res.send('<p><h1>Upload Complete!</h1><p>'); 
      }).on('error', function() { 
       res.send('Error, upload failed!'); 
      }).pipe(writestream); 

     }); 

     form.parse(req); 

    }); 


    app.get('/image/:id', function(req,res){ 

     console.log(req.params.id) 
     gfs.createReadStream({_id:req.params.id}).pipe(res); 

    }); 

}); 

Сообщение об ошибке выглядит следующим образом

events.js:72 
     throw er; // Unhandled 'error' event 
      ^
Error: write after end 
    at writeAfterEnd (C:\Users\Michael\Desktop\Chat-App\node_modules\multiparty\node_modules\readable-stream\lib\_stream_writable.js:161:12) 
    at Form.Writable.write (C:\Users\Michael\Desktop\Chat-App\node_modules\multiparty\node_modules\readable-stream\lib\_stream_writable.js:208:5) 
    at write (_stream_readable.js:582:24) 
    at flow (_stream_readable.js:591:7) 
    at _stream_readable.js:559:7 
    at process._tickCallback (node.js:419:13) 

Так выглядит многопартийная проблематично с моим кодом. Мой вопрос заключается в том, как решить эту проблему, если я должен изменить метод post для запуска кода на идентификаторе?

ответ

0

Заменить

var form = new multiparty.Form(); 

внутри

app.post('/upload', function(req,res){...}); 

не объявляют var form во всем мире. Он должен инициализировать каждый запрос на отправку

Смежные вопросы