У меня есть маршрут на моем сервере NESTJS Node API для получения файлов, однако, когда в пути нет файла, я получаю сообщение об ошибке:
Ошибка: ENOENT: нет такого файла или каталога, откройте «(указанный путь)»
После возникновения ошибки мой сервер перестает работать, и мне приходится снова перезапускать процесс с помощью «nest start».
Как мне поймать эту ошибку и вернуть ее в запрос, а не просто сломать API?
Код:
try {
const file = createReadStream(join(process.cwd(), filesrc.path));
res.set({
"Content-Type": `${filesrc.type}`,
"Content-Disposition": `attachment;filename = "${filesrc.original_name}"`,
"Content-Length": +filesrc.size
})
res.status(200);
return new StreamableFile(file);
} catch (err) {
throw new HttpException('test', 500)
}
Примечание: «filesrc» — это переменная, содержащая некоторую информацию о файле.
@jay-mcdoniel В этом проекте используется версия "@nestjs/common": "^8.0.0"
В версии 9 есть исправление, которое предотвращает сбой сервера.
Это здорово, я постараюсь обновить версию и вернуться, если она исправлена для меня, спасибо.





Два решения, которые я нашел:
# 1 (рекомендуется), как предложил Джей Макдониэль, обновите NestJS до последней версии, версия 9 устраняет проблему.
# 2 (Если вы не можете обновить свои NestJ, мой случай), вы можете сначала проверить, существует ли файл, используя функцию Node fs «existSync»
try {
if (fs.existsSync(filesrc.path)) {
const file = createReadStream(join(process.cwd(), filesrc.path));
res.set({
"Content-Type": `${filesrc.type}`,
"Content-Disposition": `attachment;filename = "${filesrc.original_name}"`,
"Content-Length": +filesrc.size
})
res.status(200);
return new StreamableFile(file);
}
else {
throw new HttpException('File not found', HttpStatus.NOT_FOUND)
}
} catch (err) {
if (err.message) {
throw new HttpException(err.message, err.status)
}
throw new HttpException(err, 500)
}
с помощью этого «обходного пути» вы можете сами сгенерировать ошибку и предотвратить поломку сервера.
Какая у вас
@nestjs/commonверсия? Я мог бы поклясться, что исправил это, чтобы возвращать ошибку, но не крашить сервер.