Nest+TypeORM后端编译正常但未生成业务路由求助
解决Nest+TypeORM后端无业务路由显示的问题
针对你的情况,业务路由未在Swagger和日志中显示,可按以下步骤排查修复:
1. 给业务控制器添加Swagger装饰器
Swagger需要识别控制器和接口的装饰器才能生成文档,你的业务控制器(如DevsController、NiveisController)目前仅使用了Nest基础路由装饰器,缺少Swagger专属装饰器:
在控制器文件中导入Swagger装饰器,并添加到控制器和接口方法上:
import { Controller, Get, Post, Body, Patch, Param, Delete } from '@nestjs/common'; import { DevsService } from './devs.service'; import { CreateDevDto } from './dto/create-dev.dto'; import { UpdateDevDto } from './dto/update-dev.dto'; // 导入Swagger装饰器 import { ApiTags, ApiOperation, ApiResponse } from '@nestjs/swagger'; // 给控制器添加标签,对应Swagger的分组 @ApiTags('devs') @Controller('devs') export class DevsController { constructor(private readonly devsService: DevsService) {} // 接口描述 @ApiOperation({ summary: '创建开发者' }) // 响应状态说明 @ApiResponse({ status: 201, description: '开发者创建成功' }) @ApiResponse({ status: 400, description: '参数错误' }) @Post() create(@Body() createDevDto: CreateDevDto) { return this.devsService.create(createDevDto); } @ApiOperation({ summary: '获取所有开发者' }) @ApiResponse({ status: 200, description: '查询成功' }) @Get() findAll() { return this.devsService.findAll(); } @ApiOperation({ summary: '根据ID获取开发者' }) @ApiResponse({ status: 200, description: '查询成功' }) @ApiResponse({ status: 404, description: '开发者不存在' }) @Get(':id') findOne(@Param('id') id: string) { return this.devsService.findOne(+id); } @ApiOperation({ summary: '更新开发者信息' }) @ApiResponse({ status: 200, description: '更新成功' }) @ApiResponse({ status: 404, description: '开发者不存在' }) @Patch(':id') update(@Param('id') id: string, @Body() updateDevDto: UpdateDevDto) { return this.devsService.update(+id, updateDevDto); } @ApiOperation({ summary: '删除开发者' }) @ApiResponse({ status: 200, description: '删除成功' }) @ApiResponse({ status: 404, description: '开发者不存在' }) @Delete(':id') remove(@Param('id') id: string) { return this.devsService.remove(+id); } }
同样给NiveisController添加对应的Swagger装饰器。
2. 给DTO类添加Swagger属性装饰器
为了让Swagger显示接口参数的详细说明,给DTO类(如CreateDevDto)添加@ApiProperty装饰器:
import { ApiProperty } from '@nestjs/swagger'; export class CreateDevDto { @ApiProperty({ description: '开发者姓名' }) nome: string; @ApiProperty({ description: '开发者年龄' }) idade: number; @ApiProperty({ description: '开发者所属等级ID' }) nivelId: number; }
3. 开启路由日志(可选)
如果想在控制台启动时看到所有业务路由,修改main.ts中创建应用的配置,开启verbose日志:
const app = await NestFactory.create(AppModule, { logger: ['log', 'error', 'warn', 'debug', 'verbose'], });
或者使用命令nest start --watch --verbose启动项目,控制台会打印所有注册的路由信息。
完成以上步骤后,重启项目,访问/api即可看到Swagger文档中的业务路由,同时控制台会显示路由映射日志。
内容的提问来源于stack exchange,提问作者Gabriel Ogassawara
相关产品推荐
相关产品推荐

