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

Bucklescript中使用Promise解析GraphQL查询类型问题求助

解决@mhallin/graphql_ppx查询发送失败的问题

从你描述的情况来看,查询本身是正确的(在swapi服务上能正常运行),但发送请求时出错,而且Js.log(filmQuery)只返回{variables: null, parse: [Function: parse]},这说明你可能在查询的使用方式或者ppx配置上出了问题,下面是几个常见的排查方向和解决方案:

1. 确保你提取了正确的查询字符串发送

@mhallin/graphql_ppx生成的查询对象里,parse是用来解析服务器响应的函数,而实际要发送给服务器的查询字符串,通常在对象的query(或document)字段里。你很可能直接把整个filmQuery对象发给了服务器,而不是提取里面的查询内容。

举个正确的使用例子:

// 假设你是这样定义查询的
module FilmQuery = [%graphql {|
  query GetFilm($id: ID!) {
    film(id: $id) {
      title
      director
    }
  }
|}];

// 创建查询实例(如果有变量要传入)
let filmQuery = FilmQuery.make(~id="1", ());

// 提取要发送的查询字符串
let queryToSend = filmQuery.query;

// 然后把 queryToSend 作为 GraphQL 请求的 `query` 参数发送

2. 检查bsconfig.json中的ppx配置是否正确

如果你的ppx没有被正确配置,编译时不会生成完整的查询对象(比如缺少query字段)。打开你的bsconfig.json,确认ppx-flags里包含了@mhallin/graphql_ppx:

{
  "name": "your-project-name",
  "ppx-flags": ["@mhallin/graphql_ppx/ppx"],
  // 其他配置...
}

修改后记得重启你的编译服务(比如bsb -w),确保配置生效。

3. 确认变量是否正确传递

你提到variables: null,如果你的查询需要变量(比如上面例子中的$id),但调用make时没有传入,就会出现这种情况。确保在创建查询实例时,把所有必填变量都传进去:

// 错误:没传变量,导致variables为null
let filmQuery = FilmQuery.make(());

// 正确:传入所需变量
let filmQuery = FilmQuery.make(~id="1", ());

如果你的查询不需要变量,那variables: null是正常的,但还是要确保你发送的是查询字符串而不是整个对象。

最后验证

调整后,再用Js.log(filmQuery)查看,应该能看到包含query字段的完整对象,里面就是你要发送的GraphQL查询字符串,用这个字符串去请求服务器应该就能正常工作了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:07:46