如何使用queryParams对嵌套对象进行字符串化以发出graphql / GET请求?

时间:2019-09-13 01:49:01

标签: javascript node.js graphql

我需要从我的节点服务器向graphQL API发出请求。我正在使用的graphQL API将query作为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)

感谢您的帮助:)

1 个答案:

答案 0 :(得分:1)

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

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

并通过:

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

返回期望的结果。希望这对某人有帮助。