doPost无法在Google应用脚本中使用

Anu*_*hra 6 post google-apps-script

我遇到了各种问题,但没有一个能解决我的问题.我doPost()在谷歌应用程序脚本中写了一个简单的代码:

function doPost(e){
  Logger.log("Hello World");
}
Run Code Online (Sandbox Code Playgroud)

然后我将其部署为网络应用程序并将网址粘贴到hurl.it上以发布帖子请求.但是,日志中没有记录任何内容,响应为200(确定).我认为它不会进入这个doPost()功能.任何人都可以指导我在这里做错了什么?

Dim*_*gns 9

您的实施不符合Web应用程序所需的所有要求.以下是文档(链接)的摘录:

Web应用程序的要求

如果脚本满足以下要求,则可以将其发布为Web应用程序:

  • 它包含一个doGet(e)doPost(e)功能.
  • 该函数返回HTML服务HtmlOutput对象或内容服务TextOutput对象.

这里有些例子:

function doGet(e) {
  var params = JSON.stringify(e);
  return HtmlService.createHtmlOutput(params);
}

function doPost(e) {
  return ContentService.createTextOutput(JSON.stringify(e.parameter));
}
Run Code Online (Sandbox Code Playgroud)

而且为了完整起见,每次更改代码时,还必须将Web App重新部署为新版本.在现有版本下重新部署不起作用,您必须为更改创建新版本才能生效.

此外,还使用标准Logger.log来跟踪Web应用程序内部的更改doGet(e)doPost(e)不可靠,因为它们是异步执行的.我建议您将输出记录到电子表格中.有一个很棒的脚本库叫做BetterLog,它扩展了Logger API来做到这一点; 它可以在以下链接中找到:

https://github.com/peterherrmann/BetterLog


更新2018-07-18

Apps脚本现在支持StackDriver Logging,可从Apps Scripts编辑器的View菜单访问.


Ala*_*lls 5

为了使发布的Web应用程序URL的“ exec”版本能够进行任何新更改,您每次对脚本进行更改时都必须发布新版本。更改有多小无关紧要。而不是使用Logger.log("Hello World");我将值写入电子表格。

SpreadsheetApp.openById(id).getSheetByName(name).appendRow(['test']);
Run Code Online (Sandbox Code Playgroud)

Web应用程序有2个不同的URL。一个以“ dev”结尾,另一个以“ exec”结尾。'dev'版本始终是当前代码。除非发布新版本,否则“ exec”版本永远不会更改。