代码之家  ›  专栏  ›  技术社区  ›  ufk

如何为GRAPHQL查询转义变量

  •  0
  • ufk  · 技术社区  · 6 年前

    我使用Angular6和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 查询。如何正确地转义它,以便在包含特殊字符的情况下查询不会被破坏?

    谢谢!

    1 回复  |  直到 6 年前
        1
  •  3
  •   Herku    6 年前

    在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(!)的转义。需要。