Перейти до основного вмісту

@ditsmod/return

Модуль @ditsmod/return дозволяє відправляти HTTP-відповідь за допомогою оператора return у межах метода, що прив'язується до конкретного роута:

import { controller, route } from '@ditsmod/core';

@controller()
export class HelloWorldController {
@route('GET')
async tellHello() {
return 'Hello World!\n';
}
}

Якщо ви хочете щоб така функціональність була доступною тільки в окремому модулі, можете проглянути готовий приклад у репозиторії Ditsmod.

Встановлення та підключення

Встановлення:

npm i @ditsmod/return

При імпорті ReturnModule потрібно ще й вирішувати колізію в масиві resolvedCollisionsPerReq, оскільки ReturnModule підміняє провайдер для токена HttpBackend, який також під капотом підміняється у @ditsmod/core:

import { HttpBackend, rootModule } from '@ditsmod/core';
import { ReturnModule } from '@ditsmod/return';

@rootModule({
imports: [
ReturnModule
// ...
],
resolvedCollisionsPerReq: [
[HttpBackend, ReturnModule]
],
exports: [ReturnModule],
// ...
})
export class AppModule {}

Як бачите, окрім імпорта, відбувається ще й експорт ReturnModule в кореневому модулі щоб функціональність, яку надає модуль ReturnModule, була доступна для будь-якого контролера.

HTTP статуси та заголовки

По дефолту, інтерсептор в модулі @ditsmod/return автоматично підставляє 201-ий статус для запитів з HTTP-методом POST, 204-ий - для OPTIONS, і 200-ий статус - для решти. Якщо вам потрібно змінити цю поведінку, варто використовувати стандартний механізм (без використання оператора return):

import { controller, Res, route, Status } from '@ditsmod/core';

@controller()
export class UsersController {
constructor(private res: Res) {}

@route('GET')
getUsersList() {
// ...
this.res.sendJson({ error: 'Page not found' }, Status.NOT_FOUND);
}
}