Я пытаюсь создать сервер 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: The specified key does not exist
У меня вопрос, как я могу поймать или исправить эту ошибку? Я пробовал несколько вещей, например, заключить эту строку s3.getObject в блок try / catch, но все это не сработало.
Как я могу поймать ошибку и исправить ее по-своему?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Я полагаю, вы можете поймать ошибку, сначала послушав эмиттер ошибок.
s3.getObject(params)
.createReadStream()
.on('error', (e) => {
// NoSuchKey & others
})
.pipe(res)
.on('data', (data) => {
// data
})
Похоже, это сработало. Я очистил его, чтобы он лучше соответствовал моим потребностям, но он работал нормально! Большое спасибо.