NestJS DTO Returns class 定义的不是数据本身
NestJS DTO Returns the class defined not the data itself
在 nestJs 中我需要 return 来自多个集合的数据,所以我创建了一个 DTO 来映射这些数据,DTO 如下所示:
import { Injectable } from "@nestjs/common";
Injectable()
export class UserSummery{
static paymentHistory : Array<{ paymentType : object,
amountPaid : number,
paymentDate : Date
}> = [];
static requiredAmount: number;
并且在一些控制器中我写了一个函数来从两个不同的服务中获取数据:
@Post('getusersummery/:id')
async GetUserSummery(@Param('id') id: string) : Promise<UserSummery> {
let usrSummery = UserSummery;
const amount = await this.cachFlowService.GetUserRequiredAmount(id);
console.log(" amount" , amount);
let cond = {
family_member : id
};
let paymentHistory = await this.cachFlowService.getMemberPaymentHistory(cond);
usrSummery.requiredAmount = amount;
//console.log("payment history" , paymentHistory)
paymentHistory.forEach(function (payment) {
console.log("payment", payment);
console.log("payment.payment_type," , payment.payment_type);
usrSummery.paymentHistory.push({
paymentType : payment.payment_type["payment_type"],
amountPaid : payment.amount,
paymentDate : payment.createdAt
})
});
console.log("usersummmmmery", usrSummery);
return usrSummery;
}
问题是我可以在控制台中看到映射良好的数据 => console.log("usersummmmmery", usrSummery);
但是我提出的请求的响应是
class 用户夏令营{
}
控制台日志显示
[{
paymentType: 'Donation',
amountPaid: 45,
paymentDate: 2022-04-25T04:49:04.247Z
},
{
paymentType: 'Loan',
amountPaid: 1500,
paymentDate: 2022-04-25T07:01:03.116Z
} ], requiredAmount: 500 }
但是对于响应,在下面的屏幕中,这就是我得到的!
我在这里错过了什么?
你得到这个是因为你将“usrSummery”设置为 CLASS UserSummery,而不是摘要的实例,然后你设置了静态数据(老实说,这没有多大意义,例如,您可以通过调用 UserSummery.paymentHistory 来设置静态日期。
我相信您想要做的是在 class 中包含 non-static 数据,然后是 let usrSummery = new UserSummery()
。如果我错了而你打算这样做,你可以通过将数据传播到对象的实际实例中来获得你正在寻找的结果 return {...usrSummery}
在 nestJs 中我需要 return 来自多个集合的数据,所以我创建了一个 DTO 来映射这些数据,DTO 如下所示:
import { Injectable } from "@nestjs/common";
Injectable()
export class UserSummery{
static paymentHistory : Array<{ paymentType : object,
amountPaid : number,
paymentDate : Date
}> = [];
static requiredAmount: number;
并且在一些控制器中我写了一个函数来从两个不同的服务中获取数据:
@Post('getusersummery/:id')
async GetUserSummery(@Param('id') id: string) : Promise<UserSummery> {
let usrSummery = UserSummery;
const amount = await this.cachFlowService.GetUserRequiredAmount(id);
console.log(" amount" , amount);
let cond = {
family_member : id
};
let paymentHistory = await this.cachFlowService.getMemberPaymentHistory(cond);
usrSummery.requiredAmount = amount;
//console.log("payment history" , paymentHistory)
paymentHistory.forEach(function (payment) {
console.log("payment", payment);
console.log("payment.payment_type," , payment.payment_type);
usrSummery.paymentHistory.push({
paymentType : payment.payment_type["payment_type"],
amountPaid : payment.amount,
paymentDate : payment.createdAt
})
});
console.log("usersummmmmery", usrSummery);
return usrSummery;
}
问题是我可以在控制台中看到映射良好的数据 => console.log("usersummmmmery", usrSummery);
但是我提出的请求的响应是 class 用户夏令营{ } 控制台日志显示
[{ paymentType: 'Donation', amountPaid: 45, paymentDate: 2022-04-25T04:49:04.247Z }, { paymentType: 'Loan', amountPaid: 1500, paymentDate: 2022-04-25T07:01:03.116Z } ], requiredAmount: 500 }
但是对于响应,在下面的屏幕中,这就是我得到的! 我在这里错过了什么?
你得到这个是因为你将“usrSummery”设置为 CLASS UserSummery,而不是摘要的实例,然后你设置了静态数据(老实说,这没有多大意义,例如,您可以通过调用 UserSummery.paymentHistory 来设置静态日期。
我相信您想要做的是在 class 中包含 non-static 数据,然后是 let usrSummery = new UserSummery()
。如果我错了而你打算这样做,你可以通过将数据传播到对象的实际实例中来获得你正在寻找的结果 return {...usrSummery}