我开始在一个新的 NestJs 项目中工作,但是当我尝试实现序列化时遇到了一个问题。我想在网络响应中发送对象之前实现序列化以转换对象。我的项目工作正常,但是当我尝试在控制器中实现ClassSerializerInterceptor时,出现以下错误:
[Nest] 27010 - 12/23/2019, 8:20:53 PM [ExceptionsHandler] Maximum call stack size exceeded +29851ms
RangeError: Maximum call stack size exceeded
at Object.Console.<computed> (internal/console/constructor.js:241:9)
at Object.log (internal/console/constructor.js:282:26)
at Object.consoleCall (<anonymous>)
at _loop_1 (/path/to/my/project/node_modules/class-transformer/TransformOperationExecutor.js:146:47)
我更改了ClassSerializerInterceptor的范围以解决问题,但错误仍然存在。根据文档,我需要在控制器中使用拦截器并在实体中使用相应的装饰器来实现序列化。我的序列化实现如下:
帐单-statement.controller.ts
import { ClassSerializerInterceptor, Controller, Get, Query, UseInterceptors } from '@nestjs/common';
import { BillingStatementService } from './billing-statement.service';
import { BillingStatementDto } from './billing-statement.dto';
import { BillingStatement } from './billing-statement.entity';
@Controller('billing-statement')
export class BillingStatementController {
constructor(private readonly billingStatementService: BillingStatementService) {}
@Get()
@UseInterceptors(ClassSerializerInterceptor)
async getBillingStatement(
@Query() query: BillingStatementDto,
): Promise<BillingStatement> {
return this.billingStatementService.findBillingStatementByUser(+query.id);
}
}
billing-statement.entity.ts
import { AutoIncrement, BelongsTo, Column, ForeignKey, HasMany, Model, PrimaryKey, Table } from 'sequelize-typescript';
import { User } from '../users/user.entity';
import { Payment } from './payment.entity';
import { Exclude } from 'class-transformer';
@Table({
tableName: 'billing_statement_tbl',
timestamps: false,
})
export class BillingStatement extends Model<BillingStatement> {
@AutoIncrement
@PrimaryKey
@Column({field: 'billing_statement_id_pk'})
id: number;
@Column
currency: string;
@Column({field: 'total_amount'})
totalAmount: number;
@Exclude()
@Column({field: 'contract_start'})
contractStart: Date;
@Exclude()
@Column({field: 'contract_end'})
contractEnd: Date;
@HasMany(() => Payment)
payments: Payment[];
}
我不知道我做错了什么或错误的根源是什么。