Как использовать веб-приложение Google Script с Node.js - PullRequest
0 голосов
/ 05 декабря 2018

Я развернул веб-приложение, используя скрипт Google Apps, и при попытке отправить к нему запросы, используя 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}));
}

Есть еще пара вопросов, связанных с этой темой, но решение, которое они предлагают, - удалить /u/# из URL.... что не применимо в моем случае.

Может ли это произойти, потому что я делаю запросы от сервера http к веб-приложению, развернутому на https?Это единственное, о чем я думаю ...


Обновление:
Я также пытался отправить запрос с сервера узла HTTPS ион все еще не работает.
Выполнение запроса GET работает нормально.

Ответы [ 2 ]

0 голосов
/ 05 декабря 2018

Выполнение POST запросов от сервера Node.js к веб-приложению, развернутому с использованием 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);
    }
  });

Надеемся, что это поможет другим, сталкивающимся с этой проблемой.

0 голосов
/ 05 декабря 2018

При публикации веб-приложения в скрипте Google Apps убедитесь, что для параметра «У кого есть доступ» установлено значение «Любой, включая анонимного».

Кроме того, оно может не работать, если ваша организация этого не делает.разрешить общий доступ к файлам диска за пределами организации.Этот параметр может быть изменен только администратором GSuite.

...