【问题标题】:GraphQL print function doesn't escape string correctlyGraphQL 打印函数无法正确转义字符串
【发布时间】:2022-02-12 03:28:48
【问题描述】:

我正在使用以下代码:

const GQL_ADD_JOB = gql`
    mutation AddJob {
        addJob(title: $title, company: $company, description: $description) {
            title
            company
            description
        }
    }
    `;

然后使用 axios,我尝试使用 GraphQL 的 print 函数进行 POST:

request.post(
  GQL_ENDPOINT,
  {
    query: print(GQL_ADD_JOB),
    variables: {
      title: job.title,
      company: job.company,
      description: job.description,
    },
  }
)

其中job.titlejob.companyjob.description 都可以是包含任何字符的字符串,包括换行符、引号等。但是,调用它会导致 JSON 解析错误。报错说明请求发送了以下数据:

'{"query":"mutation AddJob {\n addJob(title: $title, company: $company, description: $description) {\n title\n company\n description\n }\n}", "variables":{"title":"Route Service Sales Representative - 3rd Shift","company":"Cintas","description":"test desc"}}'

当我使用这些数据并通过 curl 手动执行 POST 时,我收到以下错误:

{"message":"语法错误:无法解析意外字符 "\\"。","extensions":{"code":"GRAPHQL_PARSE_FAILED","exception":{"stacktrace":["GraphQLError:语法错误:无法解析意外字符 "\\"."," at syntaxError (/home/user/repos/comp/node_modules/graphql/error/syntaxError.js:15:10)"," at readToken (/home /user/repos/comp/node_modules/graphql/language/lexer.js:360:40)””,位于 Lexer.lookahead (/home/user/repos/comp/node_modules/graphql/language/lexer.js:75: 108)"," 在 Lexer.advance (/home/user/repos/comp/node_modules/graphql/language/lexer.js:58:35)"," 在 Parser.expectToken (/home/user/repos/comp/ node_modules/graphql/language/parser.js:1408:19)"," 在 Parser.many (/home/user/repos/comp/node_modules/graphql/language/parser.js:1519:10)"," 在 Parser .parseSelectionSet (/home/user/repos/comp/node_modules/graphql/language/parser.js:271:24)"," 在 Parser.parseOperationDefinition (/home/user/repos/comp/node_modules/graphql/language/parser .js:199:26)","在 Parser.parseDefinition (/home/user/repos/comp/node_modules/graphql/language/parser.js:137:23)"," 在 Parser.many (/home/user/repos/comp/node_modules/graphql/language /parser.js:1523:26)"]}}}

【问题讨论】:

  • 所以问题不是request.post调用,而是后端不喜欢这个请求?你拥有这个api,你能分享它的代码或在服务器端调试吗?

标签: javascript axios graphql


【解决方案1】:

我将我的突变更改为这个,现在它可以工作了。我仍然不完全明白为什么其他格式不起作用。

mutation AddJob($title: String!, $company: String!, $description: String!) 
{
    addJob(title: $title, company: $company, description: $description)
}

【讨论】:

  • 您的突变缺少变量声明,但确实应该导致验证错误而不是解析错误。特别是因为请求中没有....
  • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
猜你喜欢
  • 1970-01-01
  • 2023-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多