Как отправить запрос POST из сценария приложения в Firebase с массивом - PullRequest
0 голосов
/ 14 июля 2020

Я пытаюсь отправить POST-запрос из приложения App Script в облачную функцию firebase. Но я не могу правильно отправлять массивы внутри этого запроса. Запрос отправляет массив беспорядочно, так что облачная функция не может его правильно прочитать

Я использую следующий код:

    const data = {
      var1: 'string',
      var2: {name: 'object'},
      var3: new Date(),
      var4: [1, 2, 3],
      var5: [{name: 'any object'}, {name:  'inside an array'}],
    }

    const url = "https://us-central1-my-app.cloudfunctions.net/executeFunction";
  
    const options = {
      method: "post",
      "Content-Type": "application/json", //I tried to change this content-type for other options
      payload: data
    };

    const request = UrlFetchApp.fetch(url, options);

На стороне сервера я пытался считайте данные следующими способами:

export const executeFunction = functions.https.onRequest(async(req, res) => {
  //option 1
  const data = JSON.parse(req.body);
  res.send(JSON.stringify(data));

  //option2
  const data = req.body;
  res.send(JSON.stringify(data);
})

Но на сервере req.body возвращает мне следующее значение:

{
  "var1":"string",
  "var2":{"name":"object"},
  "var3":"2020-07-14T18:45:21.946Z",
  "var4":[Ljava.lang.Object;@5e1b03dd, // :(
  "var5":[Ljava.lang.Object;@19d93f99  // :(

Как я могу правильно получить значения массива?

Я подозреваю, что это может быть что-то связано с кодировкой, но я уже пробовал использовать "Content-Type": "application/json; charset=utf-8" на объекте options, и это не сработало.

Есть идеи, как решить Это? :)

Обновление:

Спасибо @ Pickachu

Мне пришлось изменить 2 вещи: -stringify полезной нагрузки -заменить ключ на опциях с " Content-Type "to" contentType "

Вот код:

    const options = {
      method: "post",
      contentType: "application/json", //changed here
      payload: JSON.stringify(data) //and here
    };

    const request = UrlFetchApp.fetch(url, options);

1 Ответ

3 голосов
/ 14 июля 2020

Вы почти получили это. Запрос POST от UrlFetcgApp с полезной нагрузкой json должен иметь сериализованную полезную нагрузку:

https://developers.google.com/apps-script/reference/url-fetch/url-fetch-app#fetch (String, Object)

const options = {
      ...
      payload: JSON.stringify(data)
    };

И облако firebase функция с использованием триггера https автоматически анализирует json тело , поэтому нет необходимости анализировать или преобразовывать его в строку.

export const executeFunction = functions.https.onRequest(async(req, res) => {
  const data = req.body;
  console.log(data.var1);
  console.log(data.var2);
  console.log(data.var3);
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...