将表单数据发送到Firebase函数

时间:2019-03-25 11:03:54

标签: javascript firebase google-cloud-functions

我想将Javascript网页中的数据发送到Firebase云功能(HTTP请求)。

我看过一些使用Busboy的教程,但这是在云功能方面。我想知道的是如何从客户端网页将其发送到功能。

如Google Cloud Functions Documentation中所述,我在Firebase Function中使用了以下代码。

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

谢谢。

2 个答案:

答案 0 :(得分:1)

如果使用“标准” HTTPS Cloud Function,则需要使用JavaScript从您的网页发出HTTP请求。一种实现方法是使用axios库。

这很简单:

您在html页面的顶部声明该库

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

然后,在您的JavaScript代码中,您可以通过其URL调用Cloud Function。这是带有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);
  });

在Cloud Function中,您将执行req.body.firstNamereq.body.lastName来获取在POST请求主体中传递的值。如果不需要通过请求的主体传递值,则可以使用GET方法(也可以通过查询字符串传递一些值)。


如果您想在Cloud Function中使用'busboy'库来解析'multipart/form-data'上传请求(如您在问题中引用的示例所示),以下堆栈溢出答案说明了如何用axios做到:

axios post request to send form data


请注意,Firebase提供了另一种HTTP云功能:HTTPS Callable Functions

使用这种类型,您可以使用Firebase提供的专用Cloud Functions客户端库从Web前端调用它。该文档显示以下示例:

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

看看该文档,它详细解释了所有步骤(如何编写Cloud Function和如何调用它)。

答案 1 :(得分:0)

我知道,axios不是诸如formData(图片和其他)之类的对象的最佳解决方案,如果使用fetch可能会更好?