2016-05-18 75 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') 
    }) 
})