【问题标题】:NestJS request returns 500 when post request is made发出 post 请求时 NestJS 请求返回 500
【发布时间】:2021-06-01 15:24:07
【问题描述】:

我在用 nestjs 发出 post 请求时遇到了困难。请求我返回这个ERROR: An error occurred in POST /api/fraud-rules in 8ms...

{
  "isError": true,
  "status": 500,
  "name": "InternalError",
  "message": "Cannot read property 'emailAddress' of undefined",
  "data": null
}

我能够拦截请求并记录正文,但由于某种原因,请求只是返回错误并且没有登录控制器。

user.controller.ts

  @Post()
  async create(@Body() createUserDto: CreateUserDto): Promise<User> {
    console.log(createUserDto);
    return await this.usersService.create(createUserDto);
  }

user.service.ts

  async create(createUserDto: CreateUserDto): Promise< User > {
    let data: Prisma.UserCreateInput = {};
    data = Object.assign(data, createFraudRuleDto);
    return await this.usersRepository.create(data);
  }

user.repository.ts

  async create(data: Prisma.UserCreateInput): Promise<User | null> {
    return this.prisma.user.create({ data });
  }

我试图在控制器中记录数据以查看传入的数据,但它没有登录到我的控制台。

我使用nest start --debug --watch 运行应用程序

【问题讨论】:

  • 向我们展示您在哪里进行x.emailAddress 道具访问。看起来x 是undefined 不知何故
  • 您可以在您的问题中添加您的CreateUserDto 课程吗?
  • @MicaelLevi @marco 你们都是对的。问题出在我的CreateUserDto 上,构造函数中的参数未定义。
  • 来自控制器的 @Post() 请求不是异步的,如果你这样做的话:@Post('/signup') createUser(@Body() body: CreateUserDto) { this.usersService.create(body.email, body.password); }

标签: node.js typescript nestjs


【解决方案1】:

错误的原因在我的 user.dto.ts 文件中

export class CreateUserDto implements IUser {
    constructor(user: IUser) {
        this.emailAddress = user.emailAddress;
        ....
    }
}

显然,当请求发出时,我们调用的构造函数没有user。这导致了问题中的错误。

从上面重构到这个

export class CreateUserDto implements IUser {
    constructor(user: IUser) {
        if (user) {
            this.emailAddress = user.emailAddress;
            ....
        }
     }
}

解决了这个问题。

信用@MicaelLevi,@marco

【讨论】:

    猜你喜欢
    • 2020-04-16
    • 2021-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-19
    • 2020-04-12
    • 2023-01-21
    相关资源
    最近更新 更多