Node.js 如何使用类型graphQL获取graphQL类型的映射类型名 P>好,所以我开始深入研究GoCQL,我用膝关节炎、类型GoSQL和后继的类型化脚本构建了一个API。一切都很顺利。。。。我设法使查询正常工作,甚至还设法通过使用graphql字段过滤我在数据库中查询的列来进行一点优化。。。但是,当我为字段名添加别名时,似乎无法获取映射的名称
例如,给定以下ObjectType/Sequelize模型Node.js 如何使用类型graphQL获取graphQL类型的映射类型名 P>好,所以我开始深入研究GoCQL,我用膝关节炎、类型GoSQL和后继的类型化脚本构建了一个API。一切都很顺利。。。。我设法使查询正常工作,甚至还设法通过使用graphql字段过滤我在数据库中查询的列来进行一点优化。。。但是,当我为字段名添加别名时,似乎无法获取映射的名称,node.js,typescript,graphql,Node.js,Typescript,Graphql,例如,给定以下ObjectType/Sequelize模型 export interface IDepartment { departmentId: number; name: string; description: string; } @ObjectType() @Table({ underscored: true }) export class Department extends Model<Department> implements IDepar
export interface IDepartment {
departmentId: number;
name: string;
description: string;
}
@ObjectType()
@Table({ underscored: true })
export class Department extends Model<Department> implements IDepartment {
@Field({ name: 'id' })
@PrimaryKey
@Column({ field: 'department_id'})
public departmentId: number;
@Field()
@Length({ max: 100 })
@Column
name: string;
@Field()
@Length({ max: 100 })
@AllowNull
@Column
description: string;
}
示例解析程序
async department(@Arg('name') name: string, @Info() info: GraphQLResolveInfo) {
return Department.findOne({
where: { name }
});
}
这个很好用。。。。但当我这么做的时候
async department(@Arg('name') name: string, @Info() info: GraphQLResolveInfo) {
let fields = Object.keys(getFields(info))
return Department.findOne({
attributes: fields,
where: { name }
});
}
getFields是graphql字段,它失败是因为查询指定了字段名id,这是graphql字段返回的,但列名是department\u id sequelize model name departmentId
我对模式进行了仔细的梳理,使用内省fromschema函数查看模式的详细副本,但没有提到departmentId或department\u id。。。。然而,我知道它就在某个地方,因为当我从sequelize查询中排除attributes字段时,即使sequelize返回departmentId作为属性名,当我从解析程序返回它并到达客户端时,属性名也是id
任何帮助都将不胜感激。。。。我试图通过只获取请求的属性而不是整个对象来优化所有内容。我总是可以将映射存储为单独的常量,并在@Field定义中使用它们,但我想这样做作为最后的手段,但是如果可以的话,我会尽量精简代码
提前感谢大家。不幸的是,引入名称选项主要是为了支持解析器继承。使用它映射模式字段名是一种未记录的特性,因此它不提供任何映射或公开映射元数据
对输入或args类型使用name选项将更加糟糕-这将导致无法访问字段,并且属性未定义
目前,我的建议是保持简单,在得到正确的修复之前不要映射字段名
async department(@Arg('name') name: string, @Info() info: GraphQLResolveInfo) {
let fields = Object.keys(getFields(info))
return Department.findOne({
attributes: fields,
where: { name }
});
}