首页 > 解决方案 > 响应正文带有正确的对象数组,但对象为空

问题描述

我刚刚开始使用 TypeORM 和 Swagger 连接到我的数据库的 Ts.ED 项目。我有一个UserController.ts文件和一个UserService.ts文件。在服务文件中,我有一个异步函数,我在其中检索数据库中的所有用户

async find(): Promise<Users[]> {
  const users = await this.connection.manager.find(Users);
  return users
}

然后在我的控制器文件中,我调用该服务函数,find以使其响应显示在 swagger ui 上

@Get('/')
@Returns(200, Array).Of(Users)
async findAll(): Promise<Users[]> {
  const users = await this.usersService.find()
  console.log('user',users)
  return users
}

问题是 console.log 调用确实打印了所有内容,但是在 swagger ui 上,响应正文只显示

[
  {},
  {},
  {}...
]

虽然对象数量正确,但为空。

现在,如果我将控制器功能更改为

@Get('/')
//@Returns(200, Array).Of(Users)
async findAll(): Promise<Users> {
  const users = await this.usersService.find()
  console.log('user',users)
  return users[0]
}

该对象及其所有属性在 swagger ui 中正确显示。

知道为什么使用数组,它的对象显示为空吗?

标签: typescriptexpressswaggerswagger-uitypeorm

解决方案


好吧,我想通了。所以,我误解了 TypeORM 和 Ts.Ed 文档的一部分。在 TypeORM 中,数据库模型被称为Entities. 我有一个文件 aUser.entity.ts和一个User.model.ts文件,大部分是相同的,所以一开始看起来有点不对劲。现在,通过查看@some-user 的回答,我@Property在模型文件中添加了装饰器。然后我尝试将其放入实体文件,并且数组中的对象不再为空,它们显示了我放置@Property装饰器的属性。


推荐阅读