NestJs swagger缺少基本路径

Sam*_*ack 4 javascript node.js swagger nestjs

在本地机器上一切正常。部署后问题就出现了。部署后,/querybuilder将附加到基本 url。所以,

http://localhost:80/helloworld 
Run Code Online (Sandbox Code Playgroud)

会成为

http://52.xxx.xxx.139/querybuilder/helloworld 
Run Code Online (Sandbox Code Playgroud)

Swagger 页面位于:

http://52.xxx.xxx.139/querybuilder/swagger/

当我通过 swagger ui 页面执行方法时:这是我在网络选项卡中看到的:

请求网址:http://52.xxx.xxx.139/

控制器:

@Controller()
export class AppController {
  constructor(private readonly appService: AppService) {}

  @Get()
  getHello(): string {
    return this.appService.getHello();
  }
}
Run Code Online (Sandbox Code Playgroud)

主.ts

async function bootstrap() {
  const app = await NestFactory.create(AppModule);

  const options = new DocumentBuilder()
  .setTitle('Query Builder - MongoDb Parser')
  .setDescription("This is Query Builder's MongoDb Parser takes database agnostic queries and transpiles it into native MongoDb query.")
  .setVersion('1.0')
  .build();
  const document = SwaggerModule.createDocument(app, options);
  SwaggerModule.setup('api', app, document);
  await app.listen(80);
}
bootstrap();
Run Code Online (Sandbox Code Playgroud)

sas*_*hko 7

在大多数情况下,实现此目的的最合适方法是使用setGlobalPrefix方法,该方法将前缀添加到 API 端点和 swagger 使用的 URL。

const app = await NestFactory.create(AppModule);
app.setGlobalPrefix('querybuilder');
Run Code Online (Sandbox Code Playgroud)

但是,如果您的路由由外部服务器(例如 nginx)处理,则只能将前缀添加到 swagger usingaddServer方法使用的 URL 中。

const options = new DocumentBuilder()
  .setTitle('Query Builder - MongoDb Parser')
  .addServer('/querybuilder')
Run Code Online (Sandbox Code Playgroud)