你如何实际*使用* firebase-server进行测试?

时间:2018-05-14 19:55:29

标签: javascript firebase firebase-realtime-database

我正在尝试关注https://github.com/urish/firebase-server#usage-example但似乎错过了MCVE。

这是我尝试创建的foo.js

Firebase = require('firebase');

client = new Firebase('http://localhost.firebaseio.test:5000');
client.on('value', function(thing) {
    console.log('Stuff: ', thing.val());
});

然而,当我用node foo.js运行时,我得到了

TypeError: Firebase is not a constructor
    at Object.<anonymous> (/home/wayne/programming/foo.js:3:10)

显然这不是我想要的。所以我想,也许它指的是Firebase的过时版本。因此,我们只需尝试将其替换为firebase-admin

firebase = require('firebase-admin');

firebase.initializeApp({
    credential: firebase.credential.applicationDefault(),
    databaseURL: 'http://localhost.firebaseio.test:5000',
});

db = firebase.database().ref()
db.once('value')
    .then(function(thing) {
        console.log('Stuff: ', thing.val());
    });

(我不知道它是否应该看起来如此:https://github.com/firebase/quickstart-nodejs/blob/master/database/index.js是我能找到的最简单的例子)

但这只是在提示时挂起,就像它计划做某事但从未做过。

我已经使用node_modules/.bin/firebase-server -p 5000 -e启动了我的firebase服务器,我可以看到它与我们的代码库中的一些更复杂的代码相关联,但它的方式比MCVE更多,这正是我想要做的。我希望能够连接到我的firebase服务器并看到我可以读取和写入内容。

如何使用firebase-server进行测试?是否存在我缺少的MCVE?

1 个答案:

答案 0 :(得分:1)

可能缺少firebase-server用法示例的示例,127.0.0.1 localhost.firebaseio.test需要添加到/etc/hosts,否则可能无法解决。从firebase-server -h可以看出,必须通过配置&amp;数据JSON文件作为选项。建议使用&#34;实时数据库&#34; &安培; &#34;云功能&#34;,而不是尝试运行自定义WS服务器 - 因为要进行测试,必须提供预期的JSON文件 - 并且前端JavaScript库很可能无法进行身份验证,因此需要凭证。

文档说,firebase-server Firebase Web套接字协议服务器(听起来是独立的,可能会实现RFC 6455);它与firebase serve不同(我不清楚你指的是哪一个,因此这些例子混淆了 - 这可能是造成混淆的根源)......对于Google Firebase一个人可以使用npm install -g firebase-tools获取测试服务器和云功能模拟器;当使用--debug选项运行本地测试服务器时,它应该显示可能卡住的位置:

firebase serve --debug

从项目目录中执行。

例如。它可能缺乏对全局安装的模块的访问权限。目录:

sudo mkdir /usr/lib/node_modules/firebase-tools/node_modules/@google-cloud/functions-emulator/logs
sudo chown -R ....

在项目级别安装@google-cloud/functions-emulator也可以规避这一点。

并且您还需要一个firebase.json来控制部署。

例如,如果身份验证成功(public/index.html生成代码),则需要加载firebasejs/5.0.1/firebase.js,然后加载firebase setup:web以检入前端JavaScript。 用户是否经过身份验证&amp;在某个参考路径上拥有read/write的权限。

{
  "database": {
  "rules": "database.rules.json"
},
"hosting": {
  "public": "public",
  "ignore": [
      "firebase.json",
      "**/node_modules/**"
    ]
  }
}

firebase functions:shell将运行该函数模拟器,作为Node shell。

firebase/index.js用于nodeJS,例如。 firebase/package.json可以参考:

{
  "name": "...",
  "description": "...",
  "private": true,
  "dependencies": {
    "firebase-admin": "~5.8.1",
    "firebase-functions": "^0.8.1",
    "@firebase/database": "^0.1.10",
    "@google-cloud/logging": "^1.1.4"

  }
}

firebase-admin可能需要服务帐户:

var admin = require("firebase-admin");
var serviceAccount = require("path/to/serviceAccountKey.json");
admin.initializeApp({
  credential: admin.credential.cert(serviceAccount),
  databaseURL: "https://databaseName.firebaseio.com"
});

guides也解释了大部分内容......当然还有firebase --help