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

将GraphQL Mutation转换为Google Apps Script时遇请求错误求助

解决GraphQL Mutation在Google Apps Script中"No query document supplied"错误

问题背景

需要将以下可正常运行的GraphQL Mutation转换为Google Apps Script代码:

mutation {
  createReportExport(input: {
    reportId: "XXXX",
    fileContentType: CSV,
    frequency: ONCE,
    reportFilters: [
      {
        attributeName: "Sale Date",
        relativeDateQuery: {
          greaterEqual: "P14D"
        }
      }
    ]
  }) {
    reportExport {
      id
      fileUrl
    }
  }
}

尝试的GAS代码如下,但运行时返回错误:{"errors":[{"message":"No query document supplied"}]

var query = 'mutation {createReportExport(input: {reportId: "urn:abc:Report:3318979a-7628-44ab-aa0d-a822f856b908",fileContentType: CSV,frequency: ONCE,reportFilters: [{attributeName: "Sale Date",relativeDateQuery: {greaterEqual: "P10D"}}]}) {reportExport {idfileUrl}}}'
 
 var query2 = {
  'operationName': 'Mutation',
  'query': {query},
  'variables': {}
  }

  var ql = '{insert URL}';
  var content = {
    "method": 'POST', 
    "headers": {"Authorization": httpBasicHeader,
    "contentType": "application/json"},
    "payload": JSON.stringify(query2)
    };
  
  var response = UrlFetchApp.fetch(ql, content);
  var data = (response.getContentText());
  Logger.log(data);

错误原因

  1. 查询字符串格式错误:原query字符串里的idfileUrl缺少空格,应该是id fileUrl,否则GraphQL服务器无法正确解析字段。
  2. 请求体结构错误:query2对象中query字段写成了{query},这会将其转换为嵌套对象{query: "你的查询字符串"},而服务器需要直接传入查询字符串本身,导致服务器无法识别查询文档。

修正后的代码

// 1. 修正查询字符串的字段空格,确保id和fileUrl分开
var query = 'mutation {createReportExport(input: {reportId: "urn:abc:Report:3318979a-7628-44ab-aa0d-a822f856b908",fileContentType: CSV,frequency: ONCE,reportFilters: [{attributeName: "Sale Date",relativeDateQuery: {greaterEqual: "P10D"}}]}) {reportExport {id fileUrl}}}';

// 2. 修正请求体结构,query字段直接传入字符串,不是嵌套对象
var requestBody = {
  'operationName': 'createReportExport', // 可选,但建议和mutation名称一致
  'query': query,
  'variables': {}
};

// 3. 确保httpBasicHeader已正确生成(示例:替换为你的用户名和密码)
var username = "your-username";
var password = "your-password";
var httpBasicHeader = "Basic " + Utilities.base64Encode(username + ":" + password);

var graphqlEndpoint = "{insert URL}"; // 替换为实际的GraphQL端点URL
var options = {
  "method": 'POST',
  "headers": {
    "Authorization": httpBasicHeader,
    "Content-Type": "application/json"
  },
  "payload": JSON.stringify(requestBody)
};

var response = UrlFetchApp.fetch(graphqlEndpoint, options);
var data = JSON.parse(response.getContentText());
Logger.log(data);

关键修改说明

  • 修复了query字符串中idfileUrl的空格问题,保证字段能被正确解析。
  • 将query2中的query: {query}改为query: query,确保请求体中的query字段是对应的字符串内容。
  • 添加了httpBasicHeader的生成示例,避免因未定义导致的授权错误。
  • 将operationName改为和mutation名称一致(可选,但能提升请求的可读性和调试效率)。
  • 解析响应为JSON对象,方便后续处理返回数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 00:36:27