解析“ç”时出现 GraphQL 错误:无法解析意外字符“\u00E7”

GraphQL Error when parsing "ç": Cannot parse the unexpected character "\u00E7"

我将 KeystoneJS 与 GraphQL 结合使用。在我的设置中,我准备了一个下拉菜单字段(Select在 KeystoneJS 中)

    language: {type:Select, options: ['English','Français', 'Deutsch'], defaultValue: 'English'},

但是当我启动 KeystoneJS 应用程序时,我得到了

GraphQLError: Syntax Error: Cannot parse the unexpected character "\u00E7".
    at syntaxError (/Users/user0/Documents/sandbox/keystone-blank/node_modules/graphql/error/syntaxError.js:15:10)
at readToken (/Users/user0/Documents/sandbox/keystone-blank/node_modules/graphql/language/lexer.js:270:38)
at Object.lookahead (/Users/user0/Documents/sandbox/keystone-blank/node_modules/graphql/language/lexer.js:54:43)
at Object.advanceLexer [as advance] (/Users/user0/Documents/sandbox/keystone-blank/node_modules/graphql/language/lexer.js:44:33)
at Parser.expectToken (/Users/user0/Documents/sandbox/keystone-blank/node_modules/graphql/language/parser.js:1399:19)
at Parser.parseName (/Users/user0/Documents/sandbox/keystone-blank/node_modules/graphql/language/parser.js:94:22)
at Parser.parseEnumValueDefinition (/Users/user0/Documents/sandbox/keystone-blank/node_modules/graphql/language/parser.js:1014:21)
at Parser.optionalMany (/Users/user0/Documents/sandbox/keystone-blank/node_modules/graphql/language/parser.js:1497:28)
at Parser.parseEnumValuesDefinition (/Users/user0/Documents/sandbox/keystone-blank/node_modules/graphql/language/parser.js:1002:17)
at Parser.parseEnumTypeDefinition (/Users/user0/Documents/sandbox/keystone-blank/node_modules/graphql/language/parser.js:986:23)
at Parser.parseTypeSystemDefinition (/Users/user0/Documents/sandbox/keystone-blank/node_modules/graphql/language/parser.js:705:23)
at Parser.parseDefinition (/Users/user0/Documents/sandbox/keystone-blank/node_modules/graphql/language/parser.js:146:23)
at Parser.many (/Users/user0/Documents/sandbox/keystone-blank/node_modules/graphql/language/parser.js:1518:26)
at Parser.parseDocument (/Users/user0/Documents/sandbox/keystone-blank/node_modules/graphql/language/parser.js:111:25)
at parse (/Users/user0/Documents/sandbox/keystone-blank/node_modules/graphql/language/parser.js:36:17)
at parseDocument (/Users/user0/Documents/sandbox/keystone-blank/node_modules/graphql-tag/lib/graphql-tag.umd.js:135:16)
at gql (/Users/user0/Documents/sandbox/keystone-blank/node_modules/graphql-tag/lib/graphql-tag.umd.js:176:10)
at /Users/user0/Documents/sandbox/keystone-blank/node_modules/@keystonejs/keystone/lib/Keystone/index.js:508:23
at Array.map (<anonymous>)
    at Keystone.getTypeDefs (/Users/user0/Documents/sandbox/keystone-blank/node_modules/@keystonejs/keystone/lib/Keystone/index.js:508:8)
    at Keystone.getAdminSchema (/Users/user0/Documents/sandbox/keystone-blank/node_modules/@keystonejs/keystone/lib/Keystone/index.js:520:27)
    at createApolloServer (/Users/user0/Documents/sandbox/keystone-blank/node_modules/@keystonejs/app-graphql/lib/apolloServer.js:147:17) {
        message: 'Syntax Error: Cannot parse the unexpected character "\u00E7".',
        locations: [ { line: 4, column: 13 } ]
    }

当我将 'Français' 更改为 'Francais' 时,它工作正常。 GraphQL(或 Keystone)似乎不喜欢非标准字符。有谁知道这里到底发生了什么,以及我如何解决它以便我可以使用正确的形式 'Français' ?谢谢!

根据spec,字符串中的字符限制为以下字符:

/[\u0009\u000A\u000D\u0020-\uFFFF]/

这包括字符“ç”。然而,名称 架构中的事物(类型、字段、参数等)被限制为很多 smaller set of valid characters 并且必须遵循此模式:

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

如果 KeystoneJS 将上述 options 转换为一组枚举值,这将导致您看到的语法错误,因为枚举值必须是有效名称。

通常,这里的解决方法是将枚举值映射到客户端的正确等价物。