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

使用Postman调用NestJS+TypeORM接口无响应,数据未入库求助

解决NestJS + TypeORM POST请求无反馈且数据未写入Postgres的问题

看起来你遇到的问题主要集中在响应处理不规范、实体字段类型不匹配以及错误信息未返回这几个点上,一步步来排查和修复:

1. 修复控制器的响应逻辑

你现在用@Res()手动处理响应,但resp.status(ret).send()没有传递任何内容,Postman自然收不到反馈。而且NestJS更推荐让框架自动处理响应(除非你需要完全自定义),可以改成这样:

@Post()
async create(@Body() user: User) {
  const result = await this.userService.save(user);
  // 返回带状态和信息的响应体,让Postman能看到明确反馈
  if (result.status === HttpStatus.OK) {
    return {
      statusCode: result.status,
      message: '用户创建成功',
    };
  } else {
    throw new HttpException(result.message, result.status);
  }
}

如果一定要保留@Res(),记得传递响应内容:

@Post()
async create(@Res() resp: Response, @Body() user: User) {
  const result = await this.userService.save(user);
  resp.status(result.status).json({
    message: result.message,
  });
}

2. 修正实体的日期字段类型

你的createdat和updatedat定义为number类型,但@CreateDateColumn和@UpdateDateColumn默认生成的是Date对象(对应数据库的timestamp类型),类型不匹配会导致TypeORM保存失败,而且错误可能被默默吃掉。修改实体:

@CreateDateColumn({ type: "timestamp" })
createdat: Date; // 把number改成Date

@UpdateDateColumn({ type: "timestamp" })
updatedat: Date; // 同样修改

3. 不要手动传递id字段

你的id是@PrimaryGeneratedColumn()(自动递增主键),手动在Postman里传id:11会干扰TypeORM的自动生成逻辑,甚至如果数据库中已有该ID的记录,会直接触发冲突错误。Postman请求只传必填的username和password即可:

{ "username": "proba11", "password": "proba11" }

4. 完善服务层的错误反馈

现在你的服务层只返回状态码,没有具体错误信息,很难排查问题。修改服务层方法,返回包含状态和错误信息的对象:

async save(user: User): Promise<{ status: number; message: string }> {
  try {
    user.status = UserStatus.ACTIVE;
    user.method = 1;
    user.password = this.hash1(user.password);
    // 打印要保存的用户数据,方便控制台排查
    this.logger.debug('准备保存的用户数据:', user);
    await this.userRepositroy.save(user);
    return { status: HttpStatus.OK, message: '用户保存成功' };
  } catch (e) {
    if (e instanceof QueryFailedError) {
      // 用户名重复的情况(因为username设了unique)
      return { status: HttpStatus.CONFLICT, message: '用户名已存在' };
    }
    // 打印完整错误栈,控制台能看到具体问题
    this.logger.error('保存用户失败:', e.stack);
    return { status: HttpStatus.BAD_REQUEST, message: e.message };
  }
}

5. 检查Postman的请求配置

确保你做了以下设置:

  • 请求方法选择POST
  • Headers里添加Content-Type: application/json
  • Body选择raw,格式选JSON,然后粘贴你的请求体

最后一步:看控制台日志

启动NestJS项目后,观察控制台的日志输出:

  • 如果看到准备保存的用户数据的打印,说明请求已经到达服务层
  • 如果有错误栈输出,直接根据错误信息定位(比如密码加密函数报错、数据库连接问题等)

按这些步骤调整后,你应该能在Postman看到明确的响应,同时数据也能正常写入Postgres了。

内容的提问来源于stack exchange,提问作者g.mark11

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 11:57:48