我正在尝试使用class-transformer和NestJS。我正在构建一个基于 Mongoose 和 GraphQL 的 API。这就是我在我的 GraphQL 对象之一中使用 Exclude 装饰器的方式:
@ObjectType('user')
export class User extends Teacher {
@Field()
login: string;
@Field()
@Exclude()
password: string;
}
这是我在 UserResolver 中与ClassSerializerInterceptor一起使用的方法:
@UseInterceptors(ClassSerializerInterceptor)
@Mutation(returns => User, { name: 'editUserById', nullable: true })
async editById(
@Args('id') id: string,
@Args({ name: "item", type: () => UserInputType }) item: UserInputType
) {
const user = await this.usersService.editById(id, item);
return user;
}
我想要做的是从这个突变用户字段中获取没有密码(在 GraphQL 对象中排除)。但不幸的是,所有字段都是空的。来自 GraphQL 游乐场的错误示例:
{
"errors": [
{
"message": "Cannot return null for non-nullable field user.firstName.",
"locations": [
{
"line": 3,
"column": 5
}
],
"path": [
"editUserById",
"firstName"
],
"extensions": {
"code": "INTERNAL_SERVER_ERROR"
}
}
],
"data": {
"editUserById": null
}
}
教师对象:
@ObjectType('teacher')
@InputType()
export class Teacher {
@Field()
_id: string;
@Field()
firstName: string;
@Field()
lastName: string;
@Field(type => [String], { nullable: true })
schoolsIds: string[];
@Field(type => [School], { nullable: true })
schools: School[];
}
没有拦截器,一切正常(除了密码仍然可见)。任何想法我做错了什么?