如何为graphql查询转义变量

问题描述 投票:0回答:1

我用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查询中。如何正确地转义它,如果它包含特殊字符,查询将不会被破坏?

谢谢!

angular escaping graphql apollo
1个回答
3
投票

在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(!)了。

© www.soinside.com 2019 - 2024. All rights reserved.