如何通过Node.js使用Google脚本网络应用

时间:2018-12-05 11:11:06

标签: node.js google-apps-script web-applications publish

我使用Google Apps脚本部署了一个Web应用程序,当我尝试使用Node.js向其发出请求时,出现以下错误:

  

找不到Google云端硬盘页面-很抱歉,目前无法打开文件

但是当我使用Postman发送请求时,一切正常。

这是我的node.js代码:

  const options = {
    'method': 'post',
    'gzip': true,
    'accept': '*/*',
    'content-length': 0,
    'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36',
    'url': 'https://script.google.com/macros/s/script-id/exec'
  }
  request(options, (error, response, body) => {
    if(response.statusCode == 200) {
      res.sendStatus(200);
    }
    else {
      res.sendStatus(500);
    }
  });

这是Google Apps脚本网络应用的内容:

function doPost(e) {
  return ContentService.createTextOutput(JSON.stringify({success: true}));
}

还有几个与此主题相关的问题,但是他们提供的解决方案是从URL中删除/u/# ...在我的情况下不适用。

是否会因为我正在从http服务器向部署在https上的Web应用程序发出请求而发生?那是我唯一想的...


更新
我还尝试过从HTTPS节点服务器发送请求,但该请求仍然无法正常工作。
发出GET请求很好。

2 个答案:

答案 0 :(得分:1)

要从POST服务器向使用Node.js部署的Web应用程序发出Google Apps Script请求,需要指定'Content-Length'标头以及followAllRedirects选项设置为true,这是必需的,因为初始请求是重定向到另一个返回响应的请求。

工作代码如下:

  const options = {
    'method': 'post',
    'gzip': true,
    'body': [],
    'followAllRedirects': true,
    'headers': {
      'Content-Length': 0 // length of the specified `body`
    },
    'url': 'https://script.google.com/macros/s/scriptID/exec'
  }

  request(options, (error, response, body) => {
    if(response.statusCode == 200) {
      res.sendStatus(200);
    }
    else {
      res.sendStatus(500);
    }
  });

希望这会帮助面临此问题的其他人。

答案 1 :(得分:-1)

在Google Apps脚本中发布Web应用程序时,请确保将“谁拥有访问权限”选项设置为“任何人,包括匿名用户”。

此外,如果您的组织不允许在组织外部共享云端硬盘文件,则可能无法使用。 GSuite管理员只能changed设置此设置。