如何在NestJS中发送200以外的错误代码?我试图将响应对象注入一种方法,但没有方法发送错误。
save( @Body() body:any,@Res() response: Response):string {
console.log("posting...")
console.log(body)
return "saving " + JSON.stringify(body)
}
上面的代码发送状态为20X的正文,我想发送不同的状态代码,例如400或500。
答案 0 :(得分:2)
因此,既不抛出错误,也不通过静态 @HttpCode()
返回 http 状态代码的完整示例:
import { Post, Res, HttpStatus } from '@nestjs/common';
import { Response } from 'express';
...
@Post()
save(@Res() response: Response) {
response
.status(HttpStatus.BAD_REQUEST)
.send("saving " + JSON.stringify(body));
}
您需要使用 @Res()
装饰器来获取底层 express
Response
对象并使用它的 status()
方法。
尽管我仍然想知道是否有其他方法不涉及操作有状态对象,而只是像您所做的那样在 nestjs 中进行干净的返回 in spring...
答案 1 :(得分:0)
我做错了,当我不得不从express导入Response对象时,我从nestjs / common导入了响应。
答案 2 :(得分:0)
您总是可以抛出错误,让Nest为您处理错误代码。 The documentation has a great bit on what errors are already已定义,它们是常见的HTTP错误,因此它们遵循预期的代码。否则您可能会抛出自己的错误,following the syntax in the docs
答案 3 :(得分:0)
您要编写的任何代码都会显示在您的回复中
@HttpCode(204)
create() {
return 'This action adds a new cat';
}
答案 4 :(得分:0)
要在 nestjs 中返回状态代码,您需要在参数中包含 @Res()。通常在 nestjs 中,Response 对象上的 passthrough 选项默认设置为 false。这意味着您所做的任何事情都不会传递到 Response 对象中。
您不需要返回响应对象,因为您会收到这样的错误,因为它会尝试用标准的 nestjs 响应替换您的自定义响应。
<块引用>发送到客户端后无法设置标头
此外,在发送响应之前应设置状态,否则默认状态代码为 200。
async myfunction(@Param('id') id: string, @Res({passthrough: true}) response: Response) {
//do stuff ....
response.status(HttpStatus.FORBIDDEN).send('You are not allowed to do that');
return;
}