在NestJS中更改JSON响应

时间:2019-08-08 08:14:35

标签: node.js express nestjs

我正在使用node,nestjs和mongoose,我编写了一个get调用并获得了类似的结果

[
 {
    "_id": "5d4a9c0b1a6bcf14775c953c",
    "material_name": "ramboo",
    "material_status": 0,
    "is_admin_approved": true,
    "createdAt": "2019-08-07T09:38:19.237Z",
    "updatedAt": "2019-08-07T09:38:19.237Z",
    "id": "5d4a9c0b1a6bcf14775c953c"
}
]

这样的服务(material.service.ts)

async findAll(): Promise<IDMaterial[]> {
  return await this.materialModel.find({is_admin_approved: true});
  }

如何从结果中删除is_admin_approved字段

[
 {
    "_id": "5d4a9c0b1a6bcf14775c953c",
    "material_name": "ramboo",
    "material_status": 0,
    "createdAt": "2019-08-07T09:38:19.237Z",
    "updatedAt": "2019-08-07T09:38:19.237Z",
    "id": "5d4a9c0b1a6bcf14775c953c"
}
]

如何以任何方式解决此问题,请帮助我?

2 个答案:

答案 0 :(得分:1)

您可以使用lodash的omit函数从数组中的每个对象省略is_admin_approved

async findAll(): Promise<Partial<IDMaterial>[]> {
  return this.materialModel
    .find({is_admin_approved: true})
    .then(data => data.map(item => _.omit(item.toObject(), 'is_admin_approved')));
}

您还可以在您的is_admin_approved dto类中将@Exclude标记为IDMaterial,然后将检索到的项目投射到此dto(plainToClass(IDMaterial, item))。

export class IDMaterial {
   // ...
   @Exclude()
   is_admin_approved: boolean;
  // ...
}

// ...
async findAll(): Promise<Partial<IDMaterial>[]> {
  return this.materialModel
    .find({is_admin_approved: true})
    .then(data => data.map(item => plainToClass(IDMaterial, item)));

}

答案 1 :(得分:0)

希望此代码可以为您提供帮助。存储结果,然后迭代并从获取的每个对象中删除项目。然后返回更改后的对象数组。

async findAll(): Promise<IDMaterial[]> {
  const result = await this.materialModel.find({is_admin_approved: true});
  result.map(elem => delete elem.is_admin_approved)
  return result;
}