捕获AWS S3获取对象流错误Node.js

时间:2019-01-13 23:18:22

标签: javascript node.js amazon-web-services express amazon-s3

我正在尝试构建一个Express服务器,该服务器将使用Node.js和Express将S3存储桶中的项目发送到客户端。

我在AWS documentation上找到了以下代码。

var s3 = new AWS.S3({apiVersion: '2006-03-01'});
var params = {Bucket: 'myBucket', Key: 'myImageFile.jpg'};
var file = require('fs').createWriteStream('/path/to/file.jpg');
s3.getObject(params).createReadStream().pipe(file);

我将以下内容稍作更改:

app.get("/", (req, res) => {
    const params = {
        Bucket: env.s3ImageBucket,
        Key: "images/profile/abc"
    };
    s3.getObject(params).createReadStream().pipe(res);
});

我认为这应该很好。我遇到的问题是文件不存在或S3返回某种类型的错误。应用程序崩溃,出现以下错误:

  

NoSuchKey:指定的键不存在

我的问题是,如何捕获或处理此错误?我尝试了一些操作,例如将s3.getObject行包装在try / catch块中,所有这些都没有用。

如何捕获错误并以自己的方式处理?

1 个答案:

答案 0 :(得分:4)

我想您可以通过先侦听错误发射器来捕获错误。

s3.getObject(params)
  .createReadStream()
  .on('error', (e) => {
    // NoSuchKey & others
  })
  .pipe(res)
  .on('data', (data) => {
    // data
  })