如何为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 片段?

如何为 graphql 查询配置 JSON?

如何为 DynamoDB 创建 GraphQL 查询

如何为 xunit 集成测试编写 GraphQL 变异查询

我如何为 Apollo Client 指定 GraphQL 查询并获取属性出现适当字符串的项目

如何为 graphql 创建自定义错误/异常处理程序?