正如我在项目中使用ExpressJs一样,这可能会引起混乱。对我来说,它工作正常,我遵循了this和this链接。我的疑问很简单。如何通过HTTP触发器从云功能访问Firebase Realtime DB?
到目前为止有效的方法:
我可以在函数中使用ExpressJs并执行POST和GET 要求。我可以发送JSON /纯文本响应。
admin SDK的初始化似乎没有引发任何错误。
我在函数中的代码如下:
//use express
const express = require("express")
//get firebase functions
var functions = require('firebase-functions');
//get firebase admin sdk
const admin = require('firebase-admin');
/* Admin SDK */
admin.initializeApp(functions.config().firebase);
/* Express */
const ss = express()
let bodyParser = require("body-parser")
ss.use(bodyParser.json())
ss.use(bodyParser.urlencoded({ extended: false }))
//When accessing the url http://localhost:5000/proj-b5d88/us-central1/api/, I am getting the response below.
ss.get("/", (request, response) => {
response.send("Hello from Express on Firebase!")
})
//When accessing the url http://localhost:5000/proj-b5d88/us-central1/api/test, this request doesn't go through and returns the error.
ss.get("/test", (request, response) => {
var result = admin.database().ref('test/1').once('value', (snapshot) => {
var r = snapshot.val();
var rs = JSON.stringify(r);
res.send(`
<!doctype html>
<html>
<head>
<title>test</title>
</head>
<body>
<h1>Title ${ rs } </h1>
</body>
</html>`
);
});
response.send(result);
})
const api = functions.https.onRequest(ss)
module.exports = {
api
}
基本url有效并返回“ Firebase Express上的Hello消息!”,但是连接到Firebase的URL却没有。它返回以下错误。
{"error":{"code":500,"status":"INTERNAL","message":"function crashed","errors":["connect ECONNREFUSED 127.0.0.1:65373"]}}
更新: 对我来说,http触发器工作正常。那是投掷错误的部分如下:
var result = admin.database().ref('test/1').once('value', (snapshot) => {
var r = snapshot.val();
var rs = JSON.stringify(r);
res.send(`
<!doctype html>
<html>
<head>
<title>test</title>
</head>
<body>
<h1>Title ${ rs } </h1>
</body>
</html>`
);
});
注意:
我正在通过HTTP触发器触发功能。当用户访问URL时,我想对Drupal进行一些操作。
函数是否自动从项目中选择数据库?我没有在任何地方指定这样的配置。
我正在本地主机firebase serve --only functions
中使用以下命令运行firebase函数。这会是个问题吗?
答案 0 :(得分:0)
您不能使用第三方软件在Cloud Functions中监听传入的HTTP请求(或与此有关的任何类型的请求)。如果要创建API端点,则需要write an HTTP trigger。有很多这样做的例子,您也可以使用Express在该端点上设置路由。