Ghe*_*man 9 javascript node.js nestjs
我的客户期望所有成功的状态代码都等于 200。但是 NestJS 默认对所有 POST 方法使用 201。如何在应用程序范围内禁用 POST 201?不是针对一种方法,而是针对整个应用程序。
zem*_*mil 27
您应该为每个控制器指定状态代码
根据官方文档https://docs.nestjs.com/controllers#status-code
此外,默认情况下,响应的状态代码始终为 200,除了使用 201 的 POST 请求。我们可以通过在处理程序级别添加 @HttpCode(...) 装饰器来轻松更改此行为(请参阅状态代码)。
@Post()
@HttpCode(200)
create() {
return 'This action adds data';
}
Run Code Online (Sandbox Code Playgroud)
Nestjs 还有另一种依赖库(express/fastify)的方法:
我们可以使用特定于库的(例如 Express)响应对象,可以使用方法处理程序签名中的 @Res() 装饰器注入该对象(例如 findAll(@Res() response))。通过这种方法,您有能力(也有责任)使用该对象公开的本机响应处理方法。例如,使用 Express,您可以使用像 response.status(200).send() 这样的代码构建响应
但如果可能的话,我建议使用Reponse.ok来在客户端识别成功响应
sou*_*rri 10
做一个拦截器。但是说实话,201 有什么不好呢?
import { CallHandler, ExecutionContext, Injectable, HttpStatus } from '@nestjs/common';
import { map } from 'rxjs/operators';
@Injectable()
export class PostStatusInterceptor {
intercept(context: ExecutionContext, next: CallHandler) {
const ctx = context.switchToHttp();
const req = ctx.getRequest();
const res = ctx.getResponse();
return next.handle().pipe(
map(value => {
if (req.method === 'POST') {
if (res.statusCode === HttpStatus.CREATED) {
res.status(HttpStatus.OK);
}
}
return value;
}),
);
}
}
Run Code Online (Sandbox Code Playgroud)
https://docs.nestjs.com/interceptors