Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何使用类型graphQL获取graphQL类型的映射类型名 P>好,所以我开始深入研究GoCQL,我用膝关节炎、类型GoSQL和后继的类型化脚本构建了一个API。一切都很顺利。。。。我设法使查询正常工作,甚至还设法通过使用graphql字段过滤我在数据库中查询的列来进行一点优化。。。但是,当我为字段名添加别名时,似乎无法获取映射的名称_Node.js_Typescript_Graphql - Fatal编程技术网

Node.js 如何使用类型graphQL获取graphQL类型的映射类型名 P>好,所以我开始深入研究GoCQL,我用膝关节炎、类型GoSQL和后继的类型化脚本构建了一个API。一切都很顺利。。。。我设法使查询正常工作,甚至还设法通过使用graphql字段过滤我在数据库中查询的列来进行一点优化。。。但是,当我为字段名添加别名时,似乎无法获取映射的名称

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

例如,给定以下ObjectType/Sequelize模型

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 }
    });
}