如何将GraphQL响应转换为JSON返回至自建JSON API?
解决GraphQL响应转JSON返回的问题
你的代码核心问题是没正确处理graphql-request的异步请求,而且误解了它的返回逻辑——实际上request方法返回的就是已经解析完成的JavaScript对象,直接用res.json()就能返回标准JSON格式的响应,无需额外手动转换。
修正步骤:
- 用
await获取真实响应数据:你的函数已经声明为async,直接用await替代.then(),就能拿到异步请求返回的实际数据,而不是Promise对象。 - 直接返回解析后的对象:
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
相关产品推荐
相关产品推荐

