根据设计,在我们的 RESTful api 中,我们使用 HEAD 来检查实体是否存在。我最近在使用 NestJS 和使用相同路由的 Http 请求类型 HEAD 和 GET 时遇到了一个问题。出于某种原因,当客户端向 API 发出 http HEAD 请求(例如 HEAD - /api/test)时,它会路由到代码的 GET 部分控制器。经过一些故障排除后,它似乎与方法在控制器中的位置有关。如果将控制器代码的 HEAD 部分放在 GET 之后,请求将拦截到 GET 请求。如果你把它放在后面,它将按预期工作。不知道为什么,但知道这一点是件好事
代码片段:
// HEAD must be before GET for NestJS controller with the same route
@Head(':id') // check for the existence of an entity
async hasOne(@Res() response, @Param('id') id): Promise<any> {
// do something
}
@Get(':id') // Get a single entity
getOne(@Param('id') id): Promise<any> {
// do something
}
我们正在使用 NestJS 10.4.4