2017-10-12 230 views
0

请参阅使用JavaScript变量graphql突变注射(请忽略它的手动,而不是通过构造一些GQL助手)什么是在JavaScript中转义输入字符串的正确方法?

mutation { 
    createPost(
    name: "${name}", 
    description: "${description}" 
) { id } 
} 

是否有逃逸name & description字符串变量任何标准的功能?

例如,一些功能gqlEscape这将使查询安全:

mutation { 
    createPost(
    name: "${gqlEscape(name)}", 
    description: "${gqlEscape(description)}" 
) { id } 
} 

如何将这项功能是什么样子?

回答

0

您可以使用专为您的用例设计的GraphQL变量,而不是执行字符串插值。您也可以使用原始HTTP执行此操作,但在这种情况下,我通常使用graphql-request

下面是一个例子:

import { request } from 'graphql-request' 

const mutation = ` 
    mutation newPost($name: String!, $description: String) { 
    createPost(
     name: $name, 
     description: $description 
    ) { 
     id 
    } 
    } 
` 

const variables = { 
    name: 'New Post', 
} 

request('my-endpoint', mutation, variables).then(data => console.log(data)) 

的几个注意事项:

  • 我定义两个变量,name: String!description: StringString!表示这是一个需要 String类型的变量,而String表示它是一个可选变量。你可以看到我没有通过description的值,这是可能的,因为它是可选的。
  • 我做过而不是指定两个字符串的双引号,这已经由GraphQL Variables自己处理。
  • 您可以阅读更多关于GraphQL变量herehere的信息。
+1

谢谢,看起来像GraphQL请求库做的工作。我只是好奇它是如何在内部工作 - 但作为调查graphql-request代码,只是使用JSON.stringify ..所以可能在我的第一个例子中可能会运行'name:$ {JSON.stringify(name) },并且它可能会正常工作.. //但是你是对的,那不是真正的正确方法 – Jurosh

相关问题