我创建了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日志中显示结果。
答案 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,其余代码应该可以正常工作。