首页 > 解决方案 > 如何字符串化嵌套对象以使用 queryParams 发出 graphql/GET 请求?

问题描述

我需要从我的节点服务器向 graphQL API 发出请求。我使用的 graphQL APIquery将 URL 的查询参数作为 URL 的查询参数,而不是在请求的正文中。它也不接受 POST 请求。我在字符串化类似的东西时遇到问题

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

如何将其字符串化以将其作为 queryParams 发送?我已经尝试过该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 客户端库,但我不确定它们是否要用于服务器到服务器,我看到它们是从浏览器/客户端使用的。如果我应该使用客户端库,您能否推荐一个支持 GET 请求的(最好是轻量级的)(我尝试的最后一个没有 - 它被称为 Prisma)

任何帮助表示赞赏:)

标签: javascriptnode.jsgraphql

解决方案


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

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

并通过:

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

返回想要的结果。希望这可以帮助某人。


推荐阅读