如何从控制器在nestjs应用程序中发送错误代码?

时间:2019-07-04 07:48:11

标签: javascript typescript nestjs

如何在NestJS中发送200以外的错误代码?我试图将响应对象注入一种方法,但没有方法发送错误。

  save(  @Body() body:any,@Res() response: Response):string {

console.log("posting...")
    console.log(body)
    return "saving " + JSON.stringify(body)

  }

上面的代码发送状态为20X的正文,我想发送不同的状态代码,例如400或500。

5 个答案:

答案 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;
}