Поиск по сайту
Ctrl + K
Вопросы по Nest.js

Какова цель декоратора @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, вы можете также использовать встроенные методы для автоматического формирования ответов, что может упрощать ваш код.