【发布时间】:2022-03-04 03:33:14
【问题描述】:
我正在用 Nest 编写一个 RESTful API,我最近开始使用它,到目前为止我很喜欢。但是,我正在努力寻找一个干净的模式来处理我的 GET 路由的 204 No Content 响应。有什么建议吗?
如果 GET 控制器方法返回的对象为空,框架中没有内置用于返回 204 的内容,我有点惊讶——如果有,我还没有找到。如果真的没有,我也想知道这是否值得在 GitHub 上提出功能请求。
我尝试了以下方法:
- 使用
@Response()作为Controller 方法参数公开Express res 属性,然后在响应为空时使用res.sendStatus(204)。但是,这也需要我手动发送 200 个响应,而我仍然希望依靠框架来处理请求-响应周期并尽可能保持我的控制器方法干净。 - 研究了使用拦截器检查响应对象是否为空,然后将 204 状态代码写入响应中。我真的不想这样做,因为稍后可能会由于异常过滤器而更改状态代码。
- 使用中间件编写响应代码,但我的中间件在路由到控制器之前执行,之后我需要检查响应是否为空。 res.on('send') 似乎也没有在响应输出时拦截响应。
- 为我的异常过滤器处理自定义
NoContentException。虽然为成功的响应代码抛出异常很奇怪,但我认为这是我同时进行的方式,因为我的异常过滤器是在我编写的代码中执行的最后一件事。
【问题讨论】:
-
查看我的回答中的更新,现在可以使用拦截器。 :-)
标签: typescript rest api-design nestjs