2017-10-12 274 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

相關問題