btd*_*337 12 circular-dependency swagger nestjs
当我将@nest/swagger库更新到版本 4 时,发生了此错误:
(node:16134) UnhandledPromiseRejectionWarning: Error: A circular dependency has been detected (property key: "customer"). Please, make sure that each side of a bidirectional relationships are using lazy resolvers ("type: () => ClassType").
at SchemaObjectFactory.createNotBuiltInTypeReference (/opt/desenvolvimento/Haizen/projectx_back/node_modules/@nestjs/swagger/dist/services/schema-object-factory.js:182:19)
at SchemaObjectFactory.mergePropertyWithMetadata (/opt/desenvolvimento/Haizen/projectx_back/node_modules/@nestjs/swagger/dist/services/schema-object-factory.js:117:25)
at /opt/desenvolvimento/Haizen/projectx_back/node_modules/@nestjs/swagger/dist/services/schema-object-factory.js:66:35
at Array.map (<anonymous>)
at SchemaObjectFactory.exploreModelSchema (/opt/desenvolvimento/Haizen/projectx_back/node_modules/@nestjs/swagger/dist/services/schema-object-factory.js:65:52)
at SchemaObjectFactory.createNotBuiltInTypeReference (/opt/desenvolvimento/Haizen/projectx_back/node_modules/@nestjs/swagger/dist/services/schema-object-factory.js:187:37)
at SchemaObjectFactory.mergePropertyWithMetadata (/opt/desenvolvimento/Haizen/projectx_back/node_modules/@nestjs/swagger/dist/services/schema-object-factory.js:117:25)
at /opt/desenvolvimento/Haizen/projectx_back/node_modules/@nestjs/swagger/dist/services/schema-object-factory.js:66:35
at Array.map (<anonymous>)
at SchemaObjectFactory.exploreModelSchema (/opt/desenvolvimento/Haizen/projectx_back/node_modules/@nestjs/swagger/dist/services/schema-object-factory.js:65:52)
Run Code Online (Sandbox Code Playgroud)
我的模型类似乎是这样的:
@Entity()
export class Job {
.
.
.
@ManyToOne(type => Customer, customer => customer.jobs)
@ApiProperty({ type: Customer })
customer: Customer;
}
Run Code Online (Sandbox Code Playgroud)
use*_*008 47
至少在另外三种情况下,您会收到相同的错误消息,即使它们与双向关系无关:
错误的:
@ApiProperty({
type: Salutation
})
public salutation: Salutation;
Run Code Online (Sandbox Code Playgroud)
正确的:
@ApiProperty({
enum: Salutation
})
public salutation: Salutation;
Run Code Online (Sandbox Code Playgroud)
错误的:
@ApiProperty({
})
public address: {
street: string;
houseNumber: string;
};
Run Code Online (Sandbox Code Playgroud)
正确的:
@ApiProperty({
type: Address
})
public address: Address;
Run Code Online (Sandbox Code Playgroud)
错误的:
@ApiProperty({
description: 'This always returns null for downward compatibility'
})
public someLegacyField: null;
Run Code Online (Sandbox Code Playgroud)
正确的:
@ApiProperty({
description: 'This always returns null for downward compatibility',
type: String; // needed to avoid error
})
public someLegacyField: null;
Run Code Online (Sandbox Code Playgroud)
我为此在 Github 上创建了一个问题:https ://github.com/nestjs/swagger/issues/1475
btd*_*337 25
对我有用的解决方案是在@ApiProperty() 中声明带有箭头函数的类型,如下所示:
@Entity()
export class Job {
.
.
.
@ManyToOne(type => Customer, customer => customer.jobs)
@ApiProperty({ type: () => Customer })
customer: Customer;
}
Run Code Online (Sandbox Code Playgroud)