You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将GraphQL响应转换为JSON返回至自建JSON API?

解决GraphQL响应转JSON返回的问题

你的代码核心问题是没正确处理graphql-request的异步请求,而且误解了它的返回逻辑——实际上request方法返回的就是已经解析完成的JavaScript对象,直接用res.json()就能返回标准JSON格式的响应,无需额外手动转换。

修正步骤:

  1. 用await获取真实响应数据:你的函数已经声明为async,直接用await替代.then(),就能拿到异步请求返回的实际数据,而不是Promise对象。
  2. 直接返回解析后的对象:res.json()方法会自动把JavaScript对象序列化为JSON格式返回给客户端,不需要自己转成字符串。

修正后的完整代码:

const authenticationGraphQLRequest = async (req: Request, res: Response, _next: NextFunction) => {

  const apiKey: string = req.body.apiKey;
  const password: string = req.body.password;

  if (!apiKey || !password) {
    return res.sendStatus(400);
  }

  const mutationGraphQL: string = generateGraphQLRequest(apiKey, password);

  console.log("REQUEST IN GRAPHQL===>" + mutationGraphQL);

  // 用await等待异步请求完成,拿到实际响应数据
  const responseGraphQL = await request(EXTERNAL_ENDPOINT, mutationGraphQL);
  console.log("Response in GraphQL===>", responseGraphQL); // 用逗号输出,避免对象被转成[object Object]

  // 直接将响应对象传给res.json,自动序列化为JSON返回
  return res.status(200).json(responseGraphQL);
};

补充说明:

  • 原代码里的.then()写法会让responseGraphQL变成Promise实例,而非真实数据,所以console.log会输出[object Promise],await能彻底解决这个异步时序问题。
  • 输出对象时别用+拼接字符串,改用逗号分隔,不然会把对象强制转成无意义的[object Object],看不到具体内容。
  • graphql-request的request方法内部已经完成了GraphQL响应的JSON解析工作,不需要再调用JSON.parse()。

内容的提问来源于stack exchange,提问作者danimunoz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 06:25:20