Javascript 无法使用AdminSDK从函数中读取Firebase

Javascript 无法使用AdminSDK从函数中读取Firebase,javascript,firebase,firebase-realtime-database,google-cloud-functions,Javascript,Firebase,Firebase Realtime Database,Google Cloud Functions,正如我在项目中使用的那样,这可能会引起混淆。对我来说,它工作得很好,我遵循&links。我的怀疑很直截了当。如何通过HTTP触发器从云函数访问Firebase实时数据库 到目前为止效果如何: //use express const express = require("express") //get firebase functions var functions = require('firebase-functions'); //get firebase admin sdk const ad

正如我在项目中使用的那样,这可能会引起混淆。对我来说,它工作得很好,我遵循&links。我的怀疑很直截了当。如何通过HTTP触发器从云函数访问Firebase实时数据库

到目前为止效果如何:

//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
}
  • 我能够在函数中使用,并且可以执行POST和GET 请求。我能够发送JSON/纯文本响应

  • AdminSDK的初始化似乎没有抛出任何错误

我的函数代码如下:

//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
}
更新: 对我来说,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>`
        );
     });
var result=admin.database().ref('test/1')。一次('value',(快照)=>{
var r=snapshot.val();
var rs=JSON.stringify(r);
res.send(`
测试
标题${rs}
`
);
});
注意:

我通过HTTP触发器触发函数。当用户访问URL时,我想在Drupal上执行一些操作

  • 函数是否自动从项目中拾取DB?我还没有在任何地方指定这样的配置

  • 我在localhost
    firebase-server-only函数中使用以下命令运行firebase函数。这会是一个问题吗


  • 您不能使用第三方软件在云功能中侦听传入的HTTP请求(或任何类型的请求)。如果要创建API端点,则需要。有很多这样做的例子,您也可以使用Express在该端点上设置路由。

    您在这里想要实现什么?您尚未为部署指定任何触发器。您不能只在云函数上运行任意节点代码。云功能工作的唯一方式是通过触发器响应项目中的更改或传入的HTTP请求。
    /test
    是HTTP端点。我试图在收到http请求时更改一些值。我收到http请求并能够给出响应。但是,我无法阅读firebase的内容。@DougStevenson请看,&是的,我在回答中几乎就是这么说的。@DougStevenson我进一步更新了我的问题。我不明白我进入Firebase的方式有什么问题。在引用DB之前,我是否应该定义我的项目、密钥或其他内容?我认为它已经被项目本身处理好了。我认为我对expressjs的使用是混乱的根源。我通过ExpressJs使用http触发器。我跟踪了相同的url:。所有这些都对我有用。我的疑问主要是在http触发器调用函数后如何访问/修改firebase数据库。Http触发器工作正常。您从未在代码中定义HTTPS函数。它永远不会如图所示工作。您提供的链接都显示了使用SDK定义的HTTPS函数。改用这些模式。您不能使用express在某些端口上侦听-这就是为什么您会收到显示的错误消息。这与数据库无关,请原谅我的无知。我不理解这个问题。对于我来说,如果我在通过浏览器访问url时只返回一些文本,我将得到http请求的响应。只有在我添加db ref以获取数据时才会出现错误。请编辑您的问题以显示如何定义HTTP触发器。正如现在所显示的,没有。从这里的文档开始:按照建议,我更新了函数中的代码。