Firebase Cloud功能如何处理HTTP post方法?

时间:2017-03-24 09:12:34

标签: firebase google-cloud-functions

我创建了Firebase云功能应用, 我用https.onRequest创建了函数。 并使用req.body获取数据,但那里没有数据。

Firebase云功能可以处理HTTP POST方法吗?

这是我的示例代码: -

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

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

我使用POST方法测试邮递员,但未在Firebase日志中显示结果。

4 个答案:

答案 0 :(得分:12)

基于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 deploy,这将编译您的代码并创建新的“窗口小部件”功能。注意:您可以将小部件重命名为所需的任何名称。最终,它将生成用于调用该函数的URL。

答案 1 :(得分:6)

我打算做同样的事情。我认为该方法应该是检查函数体中的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

答案 2 :(得分:1)

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类型)将在请求的标头中。

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

答案 3 :(得分:-1)

也许您的项目尚未设置为与您的firebase数据库进行通信。在终端上尝试以下操作:

npm install -g firebase-tools

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

firebase login

然后

firebase init functions

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

的文件夹

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