【发布时间】:2018-07-09 17:16:05
【问题描述】:
由于我在项目中使用了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
}
基本网址有效并返回“Hello from Express on Firebase!”,但连接到 firebase 的网址却没有。它返回以下错误。
{"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 上做一些操作。
函数会自动从项目中选择数据库吗?我没有在任何地方指定这样的配置。
我在 localhost
firebase serve --only functions中使用以下命令运行 firebase 函数。这会是个问题吗?
【问题讨论】:
-
你想在这里完成什么?您没有为部署指定任何触发器。您不能只在 Cloud Functions 上运行任意节点代码。 Cloud Functions 工作的唯一方式是通过触发对项目更改或传入 HTTP 请求的响应。
-
/test是一个 http 端点。我正在尝试在收到 http 请求时更改一些值。我收到了 http 请求并且能够给出响应。但是我无法从 firebase 读取数据。 -
@DougStevenson 请看,codeburst.io/… & stackoverflow.com/questions/43579442/…
-
是的,这就是我在回答中所说的。
-
@DougStevenson 我进一步更新了我的问题。我不明白我访问 Firebase 的方式有什么问题。我应该在引用 DB 之前定义我的项目、密钥或其他内容吗?我认为它已经被项目本身照顾了。
标签: javascript firebase firebase-realtime-database google-cloud-functions