Какова цель декоратора @Res() в контроллерах NestJS?
В NestJS декоратор @Res()
используется в контроллерах для доступа к объекту ответа (Response object) от Express.js. Это позволяет разработчикам напрямую взаимодействовать с ответом HTTP, что предоставляет больше контроля над имением ответов.
Поддерживая Express.js под капотом, NestJS позволяет разработчикам использовать функции и методы, которые доступны в Express, через декоратор @Res()
. Это может быть полезно, когда необходимо настроить заголовки ответа, код состояния, или вернуть файлы, json-данные и т. д.
Как использовать @Res()
Вот пример того, как использовать @Res()
в контроллере NestJS:
import { Controller, Get, Res } from '@nestjs/common';
import { Response } from 'express';
@Controller('example')
export class ExampleController {
@Get()
getHello(@Res() res: Response): void {
res.status(200).send('Hello, World!');
}
@Get('json')
getJson(@Res() res: Response): void {
const data = { message: 'Hello, JSON!' };
res.status(200).json(data);
}
@Get('file')
getFile(@Res() res: Response): void {
const filePath = 'path/to/file.txt';
res.download(filePath, (err) => {
if (err) {
res.status(500).send('Error downloading file');
}
});
}
}
Пояснение примеров
getHello()
:- Здесь мы используем
res.status(200).send('Hello, World!')
для отправки простого текстового ответа с кодом состояния 200.
getJson()
:- В этом методе мы возвращаем JSON-ответ с сообщением.
res.status(200).json(data)
автоматически устанавливает заголовокContent-Type
вapplication/json
.
getFile()
:- Метод для отправки файла клиенту. В данном случае мы используем
res.download(filePath)
, чтобы инициировать загрузку файла. Обратите внимание, что анонимная функция обрабатывает ошибки, если они возникают во время загрузки.
Заключение
Использование декоратора @Res()
предоставляет мощные возможности для настройки ответов HTTP в контроллерах NestJS. Это особенно полезно в ситуациях, когда вам нужно больше контроля над тем, как и что отправляется клиенту. Однако, важно помнить, что соответствии с философией NestJS, вы можете также использовать встроенные методы для автоматического формирования ответов, что может упрощать ваш код.