NestJS swagger生成的文档不显示参数信息

作者:编程家 分类: typescript 时间:2025-06-21

使用NestJS框架开发后端应用程序时,一项非常重要的任务是生成文档,以便其他开发人员可以了解接口的用法和参数信息。为此,我们可以使用Swagger来自动生成文档,并且可以通过访问生成的Swagger UI来查看这些文档。

然而,有时候我们可能会遇到Swagger生成的文档不显示参数信息的问题。这可能是由于一些配置问题或代码中的错误导致的。下面将介绍如何解决这个问题,并提供一些案例代码。

首先,我们需要确保在代码中正确地配置了Swagger。在NestJS中,我们可以使用一个名为@nestjs/swagger的包来实现这个目的。首先,我们需要在我们的应用程序中安装这个包:

$ npm install @nestjs/swagger

安装完成后,我们需要在主应用程序模块中导入这个包,并在SwaggerModule的setup方法中进行配置。下面是一个示例:

typescript

import { Module } from '@nestjs/common';

import { AppController } from './app.controller';

import { AppService } from './app.service';

import { SwaggerModule, DocumentBuilder } from '@nestjs/swagger';

@Module({

imports: [],

controllers: [AppController],

providers: [AppService],

})

export class AppModule {

constructor() {

const options = new DocumentBuilder()

.setTitle('My API')

.setDescription('API description')

.setVersion('1.0')

.build();

const document = SwaggerModule.createDocument(app, options);

SwaggerModule.setup('api', app, document);

}

}

在上面的代码中,我们首先导入了DocumentBuilder和SwaggerModule。然后,我们通过创建一个DocumentBuilder实例来配置Swagger的选项,包括标题、描述和版本等信息。最后,我们使用SwaggerModule.createDocument方法创建文档,并使用SwaggerModule.setup方法将文档绑定到特定的路由上。

接下来,我们需要确保我们的控制器和路由处理程序中的注解正确地使用了@ApiParam@ApiOperation等Swagger提供的装饰器。这些装饰器用于指定参数的类型、描述和是否必需等信息。以下是一个示例:

typescript

import { Controller, Get, Param } from '@nestjs/common';

import { ApiParam, ApiOperation } from '@nestjs/swagger';

@Controller('users')

export class UsersController {

@Get(':id')

@ApiOperation({ summary: 'Get user by ID' })

@ApiParam({ name: 'id', description: 'User ID' })

getUserById(@Param('id') id: string) {

return `User with ID ${id}`;

}

}

在上面的代码中,我们使用了@ApiParam装饰器来指定参数的名称和描述,使用@ApiOperation装饰器来指定操作的摘要。这些装饰器将在Swagger生成的文档中显示参数信息。

完成以上步骤后,我们可以重新启动应用程序并访问生成的Swagger UI。在Swagger UI中,我们应该能够看到我们的控制器和操作,并且它们应该显示正确的参数信息。

解决方案

要解决Swagger生成的文档不显示参数信息的问题,我们需要确保正确地配置了Swagger,并且在控制器和路由处理程序中正确使用了Swagger提供的装饰器。通过这些步骤,我们应该能够生成包含正确参数信息的Swagger文档。

示例代码:

typescript

import { Module } from '@nestjs/common';

import { AppController } from './app.controller';

import { AppService } from './app.service';

import { SwaggerModule, DocumentBuilder } from '@nestjs/swagger';

@Module({

imports: [],

controllers: [AppController],

providers: [AppService],

})

export class AppModule {

constructor() {

const options = new DocumentBuilder()

.setTitle('My API')

.setDescription('API description')

.setVersion('1.0')

.build();

const document = SwaggerModule.createDocument(app, options);

SwaggerModule.setup('api', app, document);

}

}

import { Controller, Get, Param } from '@nestjs/common';

import { ApiParam, ApiOperation } from '@nestjs/swagger';

@Controller('users')

export class UsersController {

@Get(':id')

@ApiOperation({ summary: 'Get user by ID' })

@ApiParam({ name: 'id', description: 'User ID' })

getUserById(@Param('id') id: string) {

return `User with ID ${id}`;

}

}

参考链接:

- NestJS官方文档:https://docs.nestjs.com/

- NestJS Swagger模块文档:https://docs.nestjs.com/openapi/introduction