执行 fetch 时 doPost 不会被调用,但适用于 HTTP 客户端调用

问题描述 投票:0回答:1

我正在尝试执行一个部署为 Web 应用程序的简单应用程序脚本函数。这个网络应用程序有一个函数 doPost 和一个简单的控制台打印语句。当我尝试使用 fetch 方法从 JS 客户端执行此脚本时,出现错误“找不到脚本函数:doGet”。 然而,当我从像 Bruno 这样的 HTTP 客户端工具执行此操作时,我能够执行 Web 应用程序,并且结果符合预期。 请建议如何解决此问题。

Apps脚本代码如下

`函数 doPost(e) {

console.log('客户端发布的数据是..',JSON.stringify(e)) } `

客户端JS代码如下

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) } } 样本函数();

javascript google-apps-script fetch-api
1个回答
0
投票

您在使用 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)
}

  1. 使用 GAppsScript 库(如果适用):

如果您使用 clasp 等框架将 Apps 脚本部署为 Web 应用程序,请考虑使用 GAppsScript 库。该库简化了从客户端代码调用 Apps 脚本函数的过程,并自动处理请求格式。具体使用说明请参阅库的文档。

  1. 检查应用程序脚本日志:

即使 doPost 没有被触发,Apps 脚本日志中也可能有线索。转到 Google Apps 脚本项目中的工具 > 脚本编辑器。在脚本编辑器中,导航到“运行”>“查看日志”以查看是否记录了与您的函数调用相关的任何错误或警告。

© www.soinside.com 2019 - 2024. All rights reserved.