使用NestJS阻止Swagger/OpenAPI定义中的默认响应代码

im9ewurl  于 2022-11-23  发布在  其他
关注(0)|答案(1)|浏览(177)

我在尝试
我正在使用NestJS实现一个DELETE路由。
由于该路由只在成功删除时返回一个HTTP 204 No Content,因此使用@nestjs/swagger装饰器,我将其注解如下:

@ApiParam({
  name: 'id',
  required: true,
  type: 'string',
  example: 'abc123',
})
@ApiNoContentResponse({
  description: 'All items for the given id have been deleted',
})
@Delete('/accounts/:id/items')
async deleteItems(
  @Param('id') id: string,
) {
  // do stuff
}

堆栈

@nestjs/cli: 9.1.6
@nestjs/common: 9.1.6
@nestjs/core: 9.1.6
@nestjs/platform-express: 9.1.6
@nestjs/swagger: 6.1.2

嵌套-客户端. json

{
  "$schema": "https://json.schemastore.org/nest-cli",
  "collection": "@nestjs/schematics",
  "sourceRoot": "src",
  "compilerOptions": {
    "plugins": [
      "@nestjs/swagger/plugin"
    ]
  }
}

问题

如何防止生成此(默认?)响应?

发生了什么

当运行带有npm run start:dev的服务器时,我的route的swagger描述被创建了。虽然我没有显式定义它,但是描述现在在route的Response部分中包含了HTTP 200的条目。该条目不包含描述,也没有指示它没有显式定义的指示符。
我所期待的
当使用npm run start:dev运行服务器时,会创建我的路由的swagger描述。该描述只包含路由的Response部分中的HTTP 204条目。
我所尝试的
显式定义了一个@ApiOkResponse

// they all have no effect
@ApiOkResponse()
// OR
@ApiOkResponse({})
// OR
@ApiOkResponse({ status: 204 })

定义了一个@ApiDefaultResponse

// they all create a response 'default' with no description
@ApiDefaultResponse() 
// OR
@ApiDefaultResponse({})
// OR
@ApiDefaultResponse({ status: 204 })
egmofgnx

egmofgnx1#

您可以将@HttpCode(204)作为注解添加到代码中。默认情况下添加200,因为这是DELETE请求的默认响应状态代码。此默认行为将被上述注解覆盖。
有关状态代码的详细信息,请访问:https://docs.nestjs.com/controllers

相关问题