Облачная функция Firebase, выполняемая дважды при запуске через HTTP - PullRequest
2 голосов
/ 27 марта 2019

Я пытаюсь интегрировать облачные функции Firebase в мое приложение Ionic 3.Цель состоит в том, чтобы создать облачную функцию, которая будет создавать пользователя с помощью admin SDK.

Однако при запуске этой функции через HTTP она будет выполняться дважды только при передаче ей данных, если я просто вызываю функцию без данных, она выполняется один раз, как и предполагалось.

Код функции облака:

const functions = require('firebase-functions');

exports.createUser = functions.https.onRequest((request, response) => {
  response.set('Access-Control-Allow-Origin', '*');
  response.set('Access-Control-Allow-Headers', 'Content-Type');
  console.log(request.body);
  response.status(200).send('Hello from Firebase!');
});

HTTP-запрос:

axios.post(functionURL, {
  data: 'some data'
})
.then(res => {
  console.log(res.data);
})
.catch(err => console.log(err));

Вышеуказанный HTTP-запрос работает как задумано, и я вижу «Hello from Firebase!» Только один раз в консоли, однако, когда я смотрю на функциилоги показывают, что выполняется дважды.

enter image description here

Я очень новичок в облачных функциях Firebase, поэтому любые замечания и предложения будут высоко оценены!

1 Ответ

0 голосов
/ 28 марта 2019

Решено

Решение найдено здесь: Облачные функции для функции запуска Firebase по предварительному запросу CORS

Когда я отправлял данные как application/json, это вызывалоПредварительный запрос CORS, который является причиной того, что функция дважды выполнялась при передаче данных.

Чтобы обойти это, я просто отправил данные в виде строки application/x-www-form-urlencoded, например:

const dataStr = JSON.stringify(objectToPass);

axios({
  method: 'POST',
  headers: {
    'Content-Type': 'application/x-www-form-urlencoded'
  },
  data: `data=${dataStr}`
})

, а затем проанализировал тело обратно в объект в функции, подобной этой:

const data = JSON.parse(request.body.data);
...