我想在firebase云功能中发布请求并将数据发送到body。 默认情况下,是获取请求还是发布请求?
var functions = require('firebase-functions');
exports.tryfunction= functions.https.onRequest((req, res) => {
console.log(req.body) // or it should be req.query
});
我如何知道并决定它的方法是什么?
答案 0 :(得分:2)
我只是分享简单的代码部分。我是这样使用的。
const functions = require('firebase-functions');
exports.postmethod = functions.https.onRequest((request, response) => {
if(request.method !== "POST"){
response.send(405, 'HTTP Method ' +request.method+' not allowed');
}
response.send(request.body);
});
我希望它会有所帮助。
答案 1 :(得分:1)
没有默认值。请求方法是客户选择发送的任何内容。
回调中的query = (Movie
.select(Movie, PlaylistMovie.position)
.join(PlaylistMovie)
.where(PlaylistMovie.playlist == playlist)
.order_by(PlaylistMovie.position))
for movie in query:
print(movie.name, movie.playlistmovie.position)
对象是express.js Request对象。使用链接文档,您可以看到使用req.method可以找到请求方法。
答案 2 :(得分:0)
要指定Firebase Function接受的HTTP方法,您需要像通常在标准Express应用程序中一样使用Express API。
您可以将完整的Express应用程序作为onRequest()
的参数传递给HTTP函数。这样,您可以使用Express自己的API将Firebase函数限制为特定方法。这是一个示例:
const express = require('express');
const app = express();
// Add middleware to authenticate requests or whatever you want here
app.use(myMiddleware);
// build multiple CRUD interfaces:
app.get('/:id', (req, res) => res.send(Widgets.getById(req.params.id)));
app.post('/', (req, res) => res.send(Widgets.create()));
app.put('/:id', (req, res) => res.send(Widgets.update(req.params.id, req.body)));
app.delete('/:id', (req, res) => res.send(Widgets.delete(req.params.id)));
app.get('/', (req, res) => res.send(Widgets.list()));
// Expose Express API as a single Cloud Function:
exports.widgets = functions.https.onRequest(app);
上面的代码说明:
我们使用Express自己的API公开了带有端点/widgets
的Firebase函数,该端点具有用于不同HTTP方法的不同处理程序,例如app.post(..)
,app.get(..)
等。然后,我们将app
作为参数传递给functions.https.onRequest(app);
。就是这样,您就完成了!
您甚至可以根据需要添加更多路径,例如如果我们想要一个接受GET请求的端点到看起来像/widgets/foo/bar
的端点,我们只需添加app.get('/foo/bar', (req, res => { ... });
。
所有内容都直接来自official Firebase docs。 我很惊讶@Doug Stevenson在他的回答中没有提到这一点。