Firebase 云函数如何处理 HTTP post 方法?

How Firebase Cloud functions handle HTTP post method?

我已经创建了 Firebase Cloud Functions 应用程序, 我用 https.onRequest 创建了函数。 并使用 req.body 获取数据,但那里没有数据。

Firebase Cloud Functions 可以处理 HTTP POST 方法吗?

这是我的示例代码:-

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

exports.testPost = functions.https.onRequest((req, res) => {
    console.log(req.body);
});

我通过邮递员使用 POST 方法进行了测试,但没有在 Firebase 日志中显示结果。

可能您的项目尚未设置为与您的 firebase 数据库通信。从您的终端尝试以下操作:

npm install -g firebase-tools

然后在您的项目文件夹中,运行 并使用您的凭据登录

firebase login

然后

firebase init functions

这将创建一个包含 index.js、package.json 和 node_modules

的文件夹

如果您正确使用 Postman,您的其余代码应该可以正常工作。

我正打算做同样的事情。我认为该方法应该是检查函数体中的 request.method 。一个可能的方法是:

if (request.method != "POST") {
     respond.status(400).send("I am not happy");
     return;
}

// handle the post request

这里有一些关于请求对象包含的详细信息的参考:https://firebase.google.com/docs/functions/http-events

基于 Firebase 构建的函数也可以使用 Express.js 路由器来处理 GET/POST/PUT/DELETE,等等... Google 完全支持,并且是实现这些类型的推荐方式职能。

可以在此处找到更多文档:

https://firebase.google.com/docs/functions/http-events

这是一个基于 Node.js

的工作示例
const functions = require('firebase-functions');
const express = require('express');
const cors = require('cors');
const app = express();

// Automatically allow cross-origin requests
app.use(cors({ origin: true }));

app.get('/hello', (req, res) => {
  res.end("Received GET request!");  
});

app.post('/hello', (req, res) => {
  res.end("Received POST request!");  
});

// Expose Express API as a single Cloud Function:
exports.widgets = functions.https.onRequest(app);

然后,运行 firebase 部署,这应该会编译您的代码并创建新的 "widgets" 函数。注意:您可以将小部件重命名为任何您想要的名称。最终,它会生成一个 URL 用于调用该函数。

Firebase 函数支持 GET、POST、PUT、DELETE 和 OPTIONS 方法,您可以查看触发函数的方法类型。

// Check for POST request
if(request.method !== "POST"){
 res.status(400).send('Please send a POST request');
 return;
}

然后从 POST 请求中获取数据(例如 JSON 类型)将在您的请求的 header 中。

const postData = request.body;
// for instance
const format = req.body.format;
// query string params
let format = req.query.format;