отправить данные формы в функции Firebase - PullRequest
0 голосов
/ 25 марта 2019

Я хочу отправить данные со своей веб-страницы javascript в облачную функцию Firebase (HTTP-запрос).

Я видел несколько учебных пособий по использованию Busboy, но это на стороне облачной функции.Я хочу знать, как мне отправить его в функцию с веб-страницы на стороне клиента.

Как указано в облачных функциях Google Документация , я использовал следующий код в своей базе FirebaseФункция.

...
busboy.on('field', (fieldname, val) => {
    // TODO(developer): Process submitted field values here
    console.log(`Processed field ${fieldname}: ${val}.`);
    fields[fieldname] = val;
  });
...

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 25 марта 2019

Если вы используете «стандартную» HTTPS Cloud Function , вам необходимо отправить HTTP-запрос с веб-страницы с помощью JavaScript.Один из способов сделать это - использовать библиотеку axios .

Это довольно просто:

Вы объявляете библиотеку в головной части html-страницы

<head>
  ...
  <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
  ...
</head>

И в своем коде JavaScript вы вызываете функцию облака через ее URL.Вот пример с запросом POST:

axios.post('https://us-central1-<project-id>.cloudfunctions.net/<your-cloud-cunction-name>', {
    firstName: 'Fred',
    lastName: 'Flintstone'
  })
  .then(function (response) {
    console.log(response);
    //Do whatever you wantwith the response object, returned by the HTTPS Cloud Function
  })
  .catch(function (error) {
    console.log(error);
  });

В облачной функции вы должны выполнить req.body.firstName и req.body.lastName, чтобы получить значения, передаваемые в теле запроса POST.Если вам не нужно передавать значения через тело запроса, вы можете использовать метод GET (и, возможно, передать некоторые значения через строку запроса).


Если вы хотите, в облачной функции, чтобыиспользуйте библиотеку 'busboy' для анализа запроса на загрузку 'multipart/form-data' (как показано в примере, на который вы ссылаетесь в своем вопросе), в следующем ответе о переполнении стека объясняется, как это сделать с помощью axios:

axiosотправьте запрос на отправку данных формы


Обратите внимание, что Firebase предлагает другой тип облачной функции HTTP: HTTPS вызываемые функции .

С этим типом выможете вызвать его из веб-интерфейса с помощью специальной клиентской библиотеки Cloud Functions, предоставленной Firebase.В документации показан следующий пример:

var addMessage = firebase.functions().httpsCallable('addMessage');
addMessage({text: messageText}).then(function(result) {
  // Read result of the Cloud Function.
  var sanitizedMessage = result.data.text;
  // ...
});

Посмотрите на документ, в котором подробно объясняются все шаги (как написать функцию облака и как ее вызвать).

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

Я знаю, что axios - не лучшее решение для таких объектов, как formData (фотографии и другие), может быть, будет лучше, если вы используете fetch?

...