NestJS + Swagger UI:非 200 状态码 Execute 时返回值不显示问题

1 月 6 日
 bronana

nestjs + swagger ui

点击 try it out 和 execute 后,

好像只有 status 200 的时候,能看到正常的返回值,

而 201 或者其它状态码就看不到返回值是怎么回事?

其它状态码就显示的 error: 加一个状态码

// controller
  @Get('test1')
  test1() {
    return '111';
  }
  @Post('test2')
  test2() {
    return '222';
  }

2260 次点击
所在节点    Node.js
9 条回复
lovedebug
1 月 6 日
201 本身就可以无 response body 的~
bronana
1 月 6 日
@lovedebug https://petstore.swagger.io/#/pet/addPet 可是这个可以看到能显示的啊
pingdog
1 月 6 日
nestjs 响应 post 缺省 201 ,没回显,要回显就手设 200
pingdog
1 月 6 日
你注意看 swagger example 的 code 200 ,http code 201 一般都不接收 body 了
bronana
1 月 6 日
@pingdog 谢谢,手动设置 post 的返回状态码为 200 ,确实可以在 swagger ui 中显示了
jkhuangfu
1 月 7 日
借楼推荐下 nestjs 版的 knife4j ,nestjs-knife4j-plus npm 包
willsank0430
2 月 3 日
import { CallHandler, ExecutionContext, HttpStatus, Injectable, NestInterceptor } from '@nestjs/common';
import { Observable } from 'rxjs';
import { FastifyRequest, FastifyReply } from 'fastify';
/**
* 针对 post 请求默认响应 201 的问题处理
* */
@Injectable()
export class PostInterceptor implements NestInterceptor {
intercept(context: ExecutionContext, next: CallHandler): Observable<any> {
const request = context.switchToHttp().getRequest<FastifyRequest['raw']>();
const response = context.switchToHttp().getResponse<FastifyReply['raw']>();
if (request.method === 'POST') {
if (response.statusCode === 201) {
context.switchToHttp().getResponse().status(HttpStatus.OK);
}
}
return next.handle();
}
}
willsank0430
2 月 3 日
@willsank0430 post.interceptor.ts
humbass
2 月 9 日
一直感觉使用 nestjs 撸代码,js 的轻松自由全没了, 还不如直接上 SpingBoot!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1183424

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX