You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 06:55:55