将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);
错误原因
- 查询字符串格式错误:原
query字符串里的idfileUrl缺少空格,应该是id fileUrl,否则GraphQL服务器无法正确解析字段。 - 请求体结构错误:
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
相关产品推荐
相关产品推荐

