Catch AWS S3 Получить объектный поток ошибок Node.js - PullRequest
0 голосов
/ 14 января 2019

Я пытаюсь создать сервер Express, который будет отправлять клиенту элементы из корзины S3 с помощью Node.js и Express.

Я нашел следующий код в документации AWS .

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 голосов
/ 14 января 2019

Полагаю, вы можете обнаружить ошибку, прослушав источник ошибок.

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