Postman发送POST请求报错Cannot POST /users(404)如何解决?
NestJS POST /users 404 问题排查与解决
核心结论
404错误的本质是**POST /users路由未被NestJS正确注册**,和当前数据库配置无直接关联(除非数据库连接失败导致服务未正常启动,但你已运行npm run start:dev,先排除此情况)。
排查与解决步骤
1. 检查控制器方法的POST路由装饰器
确保User控制器中处理创建用户的方法上添加了@Post()装饰器,这是注册POST路由的必要条件:
import { Controller, Post, Body } from '@nestjs/common'; import { CreateUserDto } from './dto/create-user.dto'; import { UsersService } from './users.service'; @Controller('users') export class UsersController { constructor(private readonly usersService: UsersService) {} @Post() // 必须添加此装饰器,否则POST /users路由不存在 create(@Body() createUserDto: CreateUserDto) { return this.usersService.create(createUserDto); } }
2. 确认控制器已注册到对应模块
在UsersModule的@Module()装饰器中,必须将UsersController加入controllers数组:
import { Module } from '@nestjs/common'; import { UsersController } from './users.controller'; import { UsersService } from './users.service'; @Module({ controllers: [UsersController], // 此处必须包含控制器 providers: [UsersService] }) export class UsersModule {}
同时要保证UsersModule被导入到根模块AppModule中:
import { Module } from '@nestjs/common'; import { UsersModule } from './users/users.module'; import { TypeOrmModule } from '@nestjs/typeorm'; @Module({ imports: [ TypeOrmModule.forRoot({ type: 'postgres', url: process.env.DB_URL, entities: [process.env.ENTITY_PATH], synchronize: true, }), UsersModule, // 必须导入此模块 ], }) export class AppModule {}
3. 核对服务启动日志
运行npm run start:dev后,查看控制台日志,必须包含以下两行(类似格式):
[Nest] XXX - MM/DD/YYYY, HH:MM:SS PM LOG [RoutesResolver] UsersController {/users}: +0ms [Nest] XXX - MM/DD/YYYY, HH:MM:SS PM LOG [RouterExplorer] Mapped {/users, POST} route +0ms
如果没有这两行,说明路由未被成功注册,回到前两步检查代码。
4. 排除其他次要因素
- 若
CreateUserDto定义错误(如缺少字段验证装饰器),通常会返回400错误而非404,但仍可确认DTO格式是否正确:import { IsString } from 'class-validator'; export class CreateUserDto { @IsString() name: string; @IsString() lastName: string; } - 数据库配置错误会导致服务启动失败,若控制台有数据库连接报错,先修正
DB_URL和ENTITY_PATH(注意ENTITY_PATH的格式不要有多余空格,正确格式为dist/**/*.entity{.js,.ts})。
总结
你大概率遗漏了教程中「给控制器方法添加@Post()装饰器」或「将控制器注册到模块」的关键步骤,按照上述排查点逐一核对即可解决404问题。
内容的提问来源于stack exchange,提问作者invzbl3
相关产品推荐
相关产品推荐

