如何为graphql查询转义变量
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何为graphql查询转义变量相关的知识,希望对你有一定的参考价值。
我用angular 6用Apollo写我的网站与graphpl服务器进行交互。在将它们添加到我的gql
查询之前,我希望能够从客户端获取参数。
这是我的服务文件:
import { Injectable } from '@angular/core';
import {Apollo} from 'apollo-angular';
import gql from 'graphql-tag';
@Injectable({
providedIn: 'root'
})
export class ProductService {
constructor(private apollo: Apollo) { }
searchForProduct(productName: string) {
return this.apollo.watchQuery<any>({
query: gql`{products_by_p_name_search(lang_id:1,query:"${productName}")
{category_id,price,category_name,id,name,desc,quantity,year_manufacture,image_file}}`
});
}
}
正如你在这里看到的,函数searchForProduct
正在接收一个productName
参数,我将其添加到我的gql
查询中。如何正确地转义它,如果它包含特殊字符,查询将不会被破坏?
谢谢!
答案
在GraphQL中,您的查询应该是静态的,这意味着查询字符串不应该在运行时更改(我希望有更多的最佳实践共享,抱歉)。要实现GraphQL,需要支持变量。变量在查询字符串内定义,然后在不同的属性中发送到服务器。
您的查询示例:
query getProducts($productName: String!) {
products_by_p_name_search(lang_id:1,query: $productName) {
category_id
price
category_name
id
name
desc
quantity
year_manufacture
image_file
}
}
然后将变量添加到客户端调用:
return this.apollo.watchQuery<any>({
query, //...
variables: { productName }
});
这样就不需要转义GraphQL(!)了。
以上是关于如何为graphql查询转义变量的主要内容,如果未能解决你的问题,请参考以下文章
如何为 GraphQLObjectType 的 GraphQLList 定义 Relay 片段?