Ошибка GraphQL при разборе "ç": невозможно проанализировать неожиданный символ "\ u00E7" - PullRequest
0 голосов
/ 25 февраля 2020

Я использую Keystone JS с GraphQL. В моей настройке я готовлю поле раскрывающегося меню (Select в Keystone JS)

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

, но когда я запускаю приложение Keystone JS, я получаю

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»? Спасибо!

1 Ответ

1 голос
/ 25 февраля 2020

В соответствии с spe c символы внутри строк ограничены следующими символами:

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

Сюда входит символ «ç». Однако имена элементов в схеме (типы, поля, аргументы и т. Д. c.) Ограничены гораздо меньшим набором допустимых символов и должны следовать этому шаблону:

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

Если Keystone JS преобразует вышеприведенный options в набор значений перечисления, это приведет к синтаксической ошибке, которую вы видите, поскольку значение перечисления должно быть допустимым именем.

Обычно обходной путь заключается в том, чтобы просто сопоставить значения перечисления с их правильными эквивалентами на стороне клиента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...