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

如何使用queryParams将嵌套对象串接到graphql/GET请求中?

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

    我需要从节点服务器向graphQL API发出请求。我使用的graphQL API使用 query 作为URL的查询参数,不在请求的主体中。它也不接受POST请求。我有一个问题

    const query = {
        student(id: studentId) {
          personal {
            address
            grade
            etc {morestuff}
          }
        }
      }
    
    

    如何将此字符串化以将其作为queryparam发送?我试过 querystring 模块 querystring(query) 但它返回的结果是 student= 就这样。我尝试过JSON.stringify,但也没有成功。我需要上面的,看起来像:

    query=%7B%0A%20%20%20%20student(id%3A%20studentId)%20%7B%0A%20%20%20%20%20%20personal%20%7B%0A%20%20%20%20%20%20%20%20address%0A%20%20%20%20%20%20%20%20grade%0A%20%20%20%20%20%20%20%20etc%20%7Bmorestuff%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%7D
    

    (我用了一个在线编码器/解码器!)

    我知道有GraphQL客户机lib,但我不确定它们是否用于服务器到服务器,我看到它们是从浏览器/客户机使用的。如果我应该使用一个客户端库,你能推荐一个(最好是轻量级的)支持GET请求的库吗(我最后一次尝试的库没有-它被称为Prisma)

    感谢您的帮助:)

    1 回复  |  直到 6 年前
        1
  •  1
  •   HolyMoly    6 年前

    这对我很有用,创建了一个函数:

    function encode(query) {
      return encodeURIComponent(query).replace(/'/g, "%27").replace(/"/g, "%22");
    }
    

    并通过:

    const query = {
        student(id: studentId) {
          personal {
            address
            grade
            etc {morestuff}
          }
        }
      }
    

    返回所需的结果。希望这能帮助别人。