#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.. как мне заставить его исправлять только тот, который отправляется, а не другие?? Я добавил код исправления моего сервера