Вы можете использовать декоратор @All
для обработки всех методов запроса одним методом:
@All('user')
async createOrUpdateUser(@Req() req) {
switch (req.method) {
case 'POST':
return 'new user';
case 'PUT':
return 'updated user';
default:
return throw new NotFoundException();
}
}
Если вы определите обработчик @Get('user')
перед обработчиком @All('user')
, он будет обрабатывать запросы get. (Я бы посоветовал не делать этого, см. Ниже.)
Обратить
1) Внедрив объект отклика, специфичный для фреймворка, с помощью @Res
, вы потеряете большинство функций, делающих гнездо таким замечательным, как перехватчики или сериализация. Делайте это только если вам действительно нужно.
2) Я всегда предпочитаю извлекать общую логику в метод или класс вместо создания условных ветвей в методе. На мой взгляд, это более читаемый и понятный подход. Это также упрощает другие интеграции гнезд, например, с помощью swagger для легкого документирования вашего API.
@Put('user')
async update(@Body() body) {
const user = await this.service.prepare(body);
return this.service.updateUser(user);
}
@Post('user')
async update(@Body() body) {
const user = await this.service.prepare(body);
return this.service.createUser(user);
}
В этом примере общие части были извлечены в UserService#prepare
.