我正在尝试执行一个部署为 Web 应用程序的简单应用程序脚本函数。这个网络应用程序有一个函数 doPost 和一个简单的控制台打印语句。当我尝试使用 fetch 方法从 JS 客户端执行此脚本时,出现错误“找不到脚本函数:doGet”。 然而,当我从像 Bruno 这样的 HTTP 客户端工具执行此操作时,我能够执行 Web 应用程序,并且结果符合预期。 请建议如何解决此问题。
`函数 doPost(e) {
console.log('客户端发布的数据是..',JSON.stringify(e)) } `
const url =“https://script.google.com/macros/s/myscriptid/exec”;
让appbody = { "fruit_name" : "橙子", “数量”:“210” }
让选项= {
“标题”:{
“内容类型”:“应用程序/json”
},
“方法”:“发布”,
“正文”:JSON.stringify(appbody)
}
函数示例func()
{
尝试
{
console.log("即将调用 fetch")
fetch(url, {选项})
.then(response => {返回response.json()} )
.then(result => {console.log('api调用结果', result);
})
}
捕获(错误)
{
console.log('触发抓取时出错', error.message)
}
}
样本函数();
您在使用 fetch 但使用 HTTP 客户端时未调用 doPost 时遇到的问题可能归结为请求的发送方式。以下是问题和潜在解决方案的细分:
问题:
Google Apps 脚本期望 POST 请求具有特定格式来触发 doPost 函数。 fetch 可能不会添加 Apps 脚本识别为 POST 请求的必要标头或有效负载格式。 像 Bruno 这样的 HTTP 客户端工具可能会预先配置这些细节,使它们按预期工作。 潜在的解决方案:
修改获取请求:
更新客户端 JS 代码中的 optionsin 对象以显式包含 POST 方法和必要的标头: JavaScript
let optionsin = {
"method": "POST",
"headers": {
"Content-Type": "application/json"
},
"body": JSON.stringify(appbody)
}
如果您使用 clasp 等框架将 Apps 脚本部署为 Web 应用程序,请考虑使用 GAppsScript 库。该库简化了从客户端代码调用 Apps 脚本函数的过程,并自动处理请求格式。具体使用说明请参阅库的文档。
即使 doPost 没有被触发,Apps 脚本日志中也可能有线索。转到 Google Apps 脚本项目中的工具 > 脚本编辑器。在脚本编辑器中,导航到“运行”>“查看日志”以查看是否记录了与您的函数调用相关的任何错误或警告。