【问题标题】:In Neo4j Graphql Apollo server type definition how to add names with spaces?在 Neo4j Graphql Apollo 服务器类型定义中如何添加带空格的名称?
【发布时间】:2019-04-17 22:15:59
【问题描述】:

我的类型定义是这样的

type COMPANY {
    "AIRLINE SEGMENT": String             
    AIRLINE_TYPE: String
}

我收到一个错误提示

apollo server GraphQLError: Syntax Error: Expected Name, found :

如果我删除空格和引号,则不会出现错误。我到处搜索,但我没有办法在其中添加带有空格的名称。

我们将不胜感激任何帮助。 谢谢。

【问题讨论】:

    标签: neo4j graphql apollo-server express-graphql grandstack


    【解决方案1】:

    GraphQL 不支持名称中的空格。根据spec,名称必须符合以下正则表达式:

    /[_A-Za-z][_0-9A-Za-z]*/
    

    GraphQL 实际上会忽略文档中的所有空白,字符串和注释中的空白除外:

    空格用于提高源文本的易读性并充当标记之间的分隔符,并且任何数量的空格都可以出现在任何标记之前或之后。标记之间的空格对于 GraphQL 文档的语义意义并不重要,但是空格字符可能出现在字符串或注释标记中。

    您可能一开始就不应该在节点名称中使用空格,即使它们在技术上得到支持。这是recommended naming convention

    驼峰式,以大写字符开头

    如果您的数据源返回的对象的字段名称包含空格,您可以在解析器映射中将这些字段转换为“合法”字段名称。例如,给定一个名为 Company 的类型和一个名为 airlineSegment 的字段:

    const resolvers = {
      Company: {
        airlineSegment: company => company['AIRLINE SEGMENT']
      }
    }
    

    【讨论】:

    • 我试过了,这不起作用。我的 neo4j 数据库不在我的控制范围内。其中有带有空格的列,我需要访问它们。在您的解析器中,公司变量没有必填字段。
    • 有没有办法在解析器中提供我自己的密码查询?
    • 解析器只是一个例子。 company 的值取决于实际返回的解析字段。很难在没有实际看到您的代码的情况下提出任何具体建议。您还没有编写自己的查询吗?您还如何在服务器中填充数据?你在用neo4j-graphql-js吗?
    • 到目前为止,我一直在用 REST api 编写自己的查询。我只是想到使用 neo4j-graphql-js ,这就是我遇到这个问题的时候。我认为对于获取列之类的简单内容,我将使用 neo4jgraphql 函数,但我想我会在解析器中编写自己的密码查询。
    • 看起来neo4j-graphql-js 在这个意义上有点受限。如果您想继续使用它,您可以使用 @cypher 指令为特定字段运行密码。如果您只有少数几个领域存在此问题,那么这可能是可行的方法。
    猜你喜欢
    • 2018-10-03
    • 2021-08-22
    • 2020-03-01
    • 2021-04-28
    • 2019-06-13
    • 1970-01-01
    • 2021-07-28
    • 1970-01-01
    • 2017-12-09
    相关资源
    最近更新 更多