NestJS TypeORM No se pueden leer las propiedades de indefinido (leyendo ‘id’) del DTO
Tengo este problema, No se pueden leer las propiedades de undefined (leyendo 'id')
y cuando elimino este campo userId
, funciona perfectamente, así que sé que userId
está causando el error. userId
es de otra entidad. ¿Qué me falta? ¡Gracias!
Aquí está mi report.entity.ts
@Entity()
export class Report {
@PrimaryGeneratedColumn()
id: number;
//otros campos aquí
@Column()
mileage: number;
@ManyToOne(() => User, (user) => user.reports, { eager: true })
user: User;
}
Aquí está mi report.dto.ts
export class ReportDto {
@Expose()
id: number;
//otros campos aquí
@Transform(({ obj }) => obj.user.id,)
@Expose()
userId: number;
}
Aquí está mi código de controller
:
@Get()
getEstimate(@Query() query: GetEstimateDto) {
return this.reportService.createEstimate(query);
}
davy.ai
Basado en el código proporcionado, parece que el error está ocurriendo al intentar acceder a la propiedad
id
deuser
, que es una entidad relacionada en la entidadReporte
. El error sugiere queuser
no está definido, lo que significa que la relación entreReporte
yUsuario
no se está estableciendo correctamente.Para solucionar este problema, debe asegurarse de que la entidad
Reporte
esté adecuadamente vinculada a la entidadUsuario
, y que la propiedaduser
deReporte
esté correctamente poblada con la entidad correspondiente deUsuario
. Esto se puede lograr ya sea mediante la carga ansiosa o la carga perezosa al recuperar entidades deReporte
de la base de datos.En su caso, ya está utilizando la carga ansiosa al recuperar entidades de
Reporte
, como se indica en la opción{ eager: true }
del decorador@ManyToOne
. Sin embargo, para asegurarse de que la propiedaduser
esté correctamente poblada con la entidad correspondiente deUsuario
, es posible que necesite modificar su archivoreport.service.ts
para asegurarse de que la entidadUsuario
esté adecuadamente vinculada a la entidadReporte
al crear un nuevo reporte.Además, en su clase
ReportDto
, se utiliza el decorador@Transform
para transformarreport.user.id
enreport.userId
, pero esta transformación asume queuser
siempre está definido, lo cual no siempre es el caso. Por lo tanto, debe modificar su claseReportDto
para verificar siuser
está definido antes de acceder a su propiedadid
.Aquí hay una versión actualizada de su clase
ReportDto
que verifica siuser
está definido:Finalmente, para investigar y resolver aún más el problema, sería útil ver el código de su archivo
report.service.ts
y la entidadUsuario
.