2016-05-18 76 views
0

我有這樣的代碼的NodeJS:用快遞(Multer)發送圖片

app.get('/imgs/:id', function(req, res) { 
    // Validate that req.params.id is 16 bytes hex string 
    // Get the stored image type for this image 
    var stream = fs.createReadStream(path.join(UPLOAD_PATH, req.params.id)); 
    stream.on("readable", function() { 
     res.setHeader('Content-Type', "image/jpeg") 
     stream.pipe(res) 
    }) 
    stream.on('error', (e) => { 
     res.redirect(404, "404") 
    }) 
}); 

現在的問題是,我總是得到的

Error: Can't set headers after they are sent.

一個錯誤,因爲我用了res.setHeader功能。 但是,我不知道如何解決它。假設我想在一個頁面中使用,顯然res.send()函數已經很好, <img src="imgs/pic">,那麼我必須將這個頁面請求的標頭設置爲"image/jpeg",否則瀏覽器不會知道它是一個圖像,並贏得'不要將它表現爲一個。

那我該怎麼辦?

+0

的'readable'事件可以被髮送多次,這是造成錯誤,但使用試試這個代碼'res.sendFile()'作爲答案建議可能是一個容易得多。 – robertklep

回答

0

檢查快速回覆文檔here

app.get('/imgs/:id', function (req, res) { 
    res.sendFile(req.params.id, {root: UPLOAD_PATH, headers: {'Content-Type': 'image/jpeg'}}, function (err) { 
     if(err) throw err; 
    else console.log('sent') 
    }) 
})