Flutter中如何设置请求头访问部署在Heroku上的Hasura GraphQL服务
错误原因分析
你收到的报错是Hasura服务端无法解析请求的JSON体导致的,和HASURA_GRAPHQL_ADMIN_SECRET配置无关:
{"errors":[{"extensions":{"path":"$","code":"invalid-json"},"message":"Error in $: not enough input"}]}
第一步:先通过Postman验证服务端可用
按以下配置发请求,先排除服务端配置问题:
- 请求方式选
POST,地址填你的完整端点my_endpoint/v1/graphql - Headers 配置2个必填项:
Content-Type:application/jsonx-hasura-admin-secret: 你在Heroku配置的密钥值
- Body 选择
raw+ 格式选JSON,填入测试查询语句:{"query": "query { __typename }"}
请求返回正常结果就说明服务端没有问题,问题出在Flutter客户端配置。
第二步:修复Flutter ferry客户端配置
你的初始化代码缺少Content-Type请求头,这是GraphQL请求的必填项,修正后的代码如下:
Client initClient(String url, String secret) { final link = HttpLink( url, defaultHeaders: { // 新增必填的Content-Type头 'Content-Type': 'application/json', 'x-hasura-admin-secret': secret, }, ); final cache = Cache(); final client = Client( link: link, cache: cache, ); return client; }
如果修复后依然报错,请检查:
- 你是否已经运行
dart run build_runner build生成了ferry所需的序列化代码,未生成代码会导致请求体为空 - 你的GraphQL查询/变更语句是否有语法错误,无效的语句会导致请求体格式异常
内容的提问来源于stack exchange,提问作者husky
相关产品推荐
相关产品推荐

