在我的AWS S3 bucket中有一个名为";aws图像";。当我请求这个图像时,我得到了对象,但如果我请求了错误的对象";aws图像e";给出";访问被拒绝";错误并破坏节点服务器。
这里出了什么问题?当我请求一个不在bucket中的对象时,我希望我的服务器继续运行。
const getFileStream = fileName => {
const downloadParams = {
Key: fileName,
Bucket: bucketName
}
return s3.getObject(downloadParams).createReadStream()
}
app.get('/aws-images/:id', jsonParser, (req, res) => {
const id = req.params.id
try {
const readStream = getFileStream(id)
readStream.pipe(res)
} catch (err) {
res.json(err)
}
})
尝试了这个尝试-捕获块;访问被拒绝";不存在对象的错误使服务器崩溃。
解决方案并不优雅。实际上很脏。我无法将下载功能与路由器分开。这就是路线的样子。现在错误不会压垮服务器。我们发现了错误。
app.get('/aws-images/:id', jsonParser, (req, res) => {
const id = req.params.id
const downloadParams = {
Key: id,
Bucket: bucketName
}
s3.getObject(downloadParams)
.createReadStream()
.on('error', e => {
// handle aws s3 error from createReadStream
console.log(e)
res.json(e)
})
.pipe(res)
.on('data', data => {
// retrieve data
})
.on('end', () => {
// stream has ended
})
})