Почтовый запрос Google Sheets — ошибка слишком большой полезной нагрузки

#node.js #mongodb #google-apps-script #google-sheets-api

#node.js #mongodb #google-apps-script #google-sheets-api

Вопрос:

Я пытаюсь выполнить запрос POST из таблицы Google на сервер heroku из 12 ячеек (всего 488324 символов), используя следующий скрипт Google apps:

 function sendInfoToApi() {
      const randomId = Math.random();
    
      var en1 = SpreadsheetApp.getActive().getSheetByName("Final").getRange('A3').getValues()[0][0];
      var en2 = SpreadsheetApp.getActive().getSheetByName("Final").getRange('A4').getValues()[0][0];
      var en3 = SpreadsheetApp.getActive().getSheetByName("Final").getRange('A5').getValues()[0][0];
      var en4 = SpreadsheetApp.getActive().getSheetByName("Final").getRange('A6').getValues()[0][0];
    
      var fr1 = SpreadsheetApp.getActive().getSheetByName("Final").getRange('B3').getValues()[0][0];
      var fr2 = SpreadsheetApp.getActive().getSheetByName("Final").getRange('B4').getValues()[0][0];
      var fr3 = SpreadsheetApp.getActive().getSheetByName("Final").getRange('B5').getValues()[0][0];
      var fr4 = SpreadsheetApp.getActive().getSheetByName("Final").getRange('B6').getValues()[0][0];
    
      var de1 = SpreadsheetApp.getActive().getSheetByName("Final").getRange('C3').getValues()[0][0];
      var de2 = SpreadsheetApp.getActive().getSheetByName("Final").getRange('C4').getValues()[0][0];
      var de3 = SpreadsheetApp.getActive().getSheetByName("Final").getRange('C5').getValues()[0][0];
      var de4 = SpreadsheetApp.getActive().getSheetByName("Final").getRange('C6').getValues()[0][0];
    
      // 11111
      var data1 = {
        "title": randomId,
        "en1": en1
      }
      var payload1 = JSON.stringify(data1)  
      var url1 = 'https://ag-sheets-api.herokuapp.com/posts';
      var fetchParameters1 = {
          'method': 'post',
          'contentType': 'application/json', 
          'payload' : payload1,
          'muteHttpExceptions' : false
      };
      try {
          var response = UrlFetchApp.fetch(url1, fetchParameters1);
          } catch(e){
            Logger.log(e)
      }
    
      // 22222
      var data2 = {
        "title": randomId,
        "en1": en2
      }
      var payload2 = JSON.stringify(data2)  
      var url2 = 'https://ag-sheets-api.herokuapp.com/posts/${randomId}';
      var fetchParameters2 = {
          'method': 'patch',
          'contentType': 'application/json', 
          'payload' : payload2,
          'muteHttpExceptions' : false
      };
      try {
          var response = UrlFetchApp.fetch(url2, fetchParameters2);
          } catch(e){
            Logger.log(e)
      }
    
    
    }
 

Я получаю эту ошибку, когда отправляю все 12 ячеек (или даже больше 1):

 Exception: Request failed for https://xxxxx.herokuapp.com returned code 413. Truncated server response: 
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Error</title>
</head>
<body>
<pre>Payload Too Large</pre>
</body>
</html>
 (use muteHttpExceptions option to examine full response)
 

12 ячеек — это конечный результат огромной страницы доставки html для веб-сайта (50 тыс. символов). Поскольку Google Sheets ограничивает ячейки до 50000 символов, у меня должно быть 12 ячеек конечного html. То, что я пытаюсь сделать, это вывести 12 ячеек на сервер, сохранить их в базе данных … а затем создать где-нибудь интерфейс, который будет выполнять некоторую конкатенацию, находить / заменять и уродовать / минимизировать действия и выплевывать окончательный полный html страницы, чтобы каждый мог сделать простую копиювставьте и загрузите его на сервер компании.

Как вы можете видеть, чтобы обойти эту проблему, я хочу выполнять по одному запросу за раз.. итак, я попытался выполнить первоначальный запрос Post, а затем запрос на исправление, но я не вижу, чтобы часть исправления работала .. это правильный способ выполнить запрос на получение исправления?

Текущие ограничения скрипта Google apps

Код исправления моего сервера:

 //UPDATE A POST
router.patch('/:postId', async (req,res) => {
  try {
    const updatedPost = await Post.updateOne(
      //{ _id:req.params.postId }, 
      { title:req.params.postId }, 
      { $set: {
        title: req.body.title,
        en1: req.body.en1,
        en2: req.body.en2,
        en3: req.body.en3,
        en4: req.body.en4,
        fr1: req.body.fr1,
        fr2: req.body.fr2,
        fr3: req.body.fr3,
        fr4: req.body.fr4,
        de1: req.body.de1,
        de2: req.body.de2,
        de3: req.body.de3,
        de4: req.body.de4 
      } }
    )
    res.json(updatedPost)
  }catch(err){
    res.json({ message: err })
  }
})

module.exports = router;
 

Комментарии:

1. Вы проверили, успешно ли выполняется этот запрос из другого места? Кроме того, как насчет разделения этого на несколько запросов, чтобы уменьшить полезную нагрузку для каждого?

2. я пытаюсь понять, как я мог бы заполнить одно и то же сообщение в базе данных 4 сообщениями .. 1 запрос post, а остальное исправление, которое я предполагаю

3. вы не можете понять это.. обновит вопрос

4. I'm not seeing the patch part work : можете ли вы быть более конкретным? Вы получаете какую-либо ошибку? patch это допустимый метод запроса для UrlFetch, и я думаю, что вы используете его правильно. Вы настроили свой сервер на прослушивание patch запросов по этому URL?

5. хорошо, итак, я заставил его работать, но каждый раз, когда я исправляю его, он заменяет остальные на null.. как мне заставить его исправлять только тот, который отправляется, а не другие?? Я добавил код исправления моего сервера