如何处理 GraphQL Schema 定义中的连字符

Posted

技术标签:

【中文标题】如何处理 GraphQL Schema 定义中的连字符【英文标题】:How to handle hyphens in GraphQL Schema definitions 【发布时间】:2017-05-16 14:09:00 【问题描述】:

我的猫鼬架构如下

var ImageFormats = new Schema(
     svg        : String,
     png-xlarge : String,
     png-small  : String
);

当我将其转换为 GraphQL Schema 时,我尝试这样做

export var GQImageFormatsType: ObjectType = new ObjectType(
     name: 'ImageFormats',

     fields: 
          svg        :  type: GraphQLString ,
         'png-xlarge':  type: GraphQLString ,
         'png-small' :  type: GraphQLString 
 
);

GraphQL 返回以下错误:Error: Names must match /^[_a-zA-Z][_a-zA-Z0-9]*$/ but "png-xlarge" does not.

如果我想在 Mongoose 模型之后对 GraphQL 进行建模,我该如何协调这些字段?我有办法创建别名吗?

(我在 graffiti 和 *** 论坛上搜索过这个,但找不到类似的问题)

【问题讨论】:

在您上面的代码(猫鼬模式)中,您没有声明 png-lg 属性 @Medet_Tleukabiluly 抱歉,我粘贴了错误的错误消息。它确实引用了猫鼬模式的 png-xlarge 属性。有什么想法吗? 尝试显式定义 mongoose 架构的默认值 png-xlarge : type: String, default: '' ,可能 mongoose 空值与 GraphQLString 空值不同 @MedetTleukabiluly 这不起作用。问题肯定和字段名有关,graphQLs 代码库也证实了这一点。 【参考方案1】:

GraphQL 返回以下错误:错误:名称必须匹配 /^[_a-zA-Z][_a-zA-Z0-9]*$/ 但“png-xlarge”不匹配。

GraphQL 抱怨字段名称 'png-xlarge' 无效。错误消息中的正则表达式表示第一个字符可以是字母,不考虑大小写或下划线。其余字符也可以有数字。因此,很明显,连字符- 和单引号' 都不能用于字段名称。这些规则基本上遵循几乎所有编程语言中的变量命名规则。您可以查看GraphQL naming rules。

如果我尝试在 Mongoose 模型之后对 GraphQL 进行建模,我该如何协调这些字段?我有办法创建别名吗?

resolve函数的帮助下,你可以这样做:

pngXLarge:  
    type: GraphQLString,
    resolve: (imageFormats) => 
        // get the value `xlarge` from the passed mongoose object 'imageFormats'
        const xlarge = imageFormats['png-xlarge'];
        return xlarge;
    ,
,

【讨论】:

感谢这是完美的@ahmad-ferdous

以上是关于如何处理 GraphQL Schema 定义中的连字符的主要内容,如果未能解决你的问题,请参考以下文章

如何处理 GraphQL 中的嵌套输入

如何处理 Vue.JS 中的 Apollo Graphql 查询错误?

GraphQL:如何处理在自己的类型定义中引用类型?

如何处理 graphQL 突变中的 Union 或 Interface?

如何处理数据加载器/GraphQL 嵌套查询中的并发 DbContext 访问?

graphql + apollo-server-express,如何处理 express authMiddleware 中的身份验证错误?