Tag: firebase database

本地Firebase服务器节点会引发“Firebase.goOffline不是function”

这可能是我的用户错误(我不熟悉nodejs,所以只是摸索我的方式)。 当我按照https://github.com/urish/firebase-server和https://firebase.googleblog.com/2015/04/end-to-end-testing-with-firebase- server_16.html 当我运行firebase-server.cmd -p 5555 -v我运行这个,所以我可以unit testing。 TypeError: this.Firebase.goOffline is not a function at Object.FirebaseServer ([…]\AppData\Roaming\npm\node_modules\firebase-server\index.js:50:16) at Object.<anonymous> ([…]\AppData\Roaming\npm\node_modules\firebase-server\bin\firebase-server.js:21:2) at after ([…]\AppData\Roaming\npm\node_modules\firebase-server\node_modules\cli\cli.js:1057:18) at Object.cli.main ([…]\AppData\Roaming\npm\node_modules\firebase-server\node_modules\cli\cli.js:1062:9) at Object.<anonymous> ([…]\AppData\Roaming\npm\node_modules\firebase-server\bin\firebase-server.js:14:5) at Module._compile (module.js:409:26) at Object.Module._extensions..js (module.js:416:10) at Module.load (module.js:343:32) at Function.Module._load (module.js:300:12) at Function.Module.runMain (module.js:441:10)

如何防止Google Cloud VM实例对Firebase数据库中的一个事件做出多重反应?

问题: doSomething()函数被调用两次(由每个正在运行的VM实例)。 我只能通过一个虚拟机实例来对每个事件做出反应? Google云端平台上的Node.js脚本: function listenForNotificationRequests() { var requests = ref.child('some_node'); requests.on('child_added', function(requestSnapshot) { var request = requestSnapshot.val(); doSomething( request.type, function() { requestSnapshot.ref.remove(); }); }, function(error) { console.error(error); }); };

Nodejs Firebase和Angular4authentication

我有一个客户端应用程序,用angular4编写,与firebase服务器通信。 目前,我正在尝试将一个nodejs与firebase集成,以便与客户端应用程序进行通信。 Firebase <—->客户端(Angular4)<—-> NodeJs(firebase-admin)<—-> Firebase 我已经设置了一个fire-adminconfiguration: var admin = require("firebase-admin"); var serviceAccount = require("./server/myfile.json"); admin.initializeApp({ credential: admin.credential.cert(serviceAccount), databaseURL: "https://mydb.firebaseio.com" }); 并能够像这样检索数据: var db = admin.database(); var ref = db.ref("messages"); ref.once("value", function(snapshot) { console.log(snapshot.val()); }); 但是,我怎么能检查NodeJS服务器是否在客户端应用程序中的用户已经login ? 我需要这个NodeJS服务器与客户端进行通信,并在必要时提供数据和文件。

Firebase函数返回并承诺不会退出该函数

我仍然是Firebase世界的初学者,我一直在试图弄清楚下面的代码是什么问题,但是我没有任何可能的办法。 代码应该从数据库中的用户configuration文件中检索uid ,然后使用它来更新authenticationconfiguration文件,然后在authenticationconfiguration文件更新成功时再次更新数据库configuration文件。 在index.js我定义了一个导出的函数来处理来自HTML表单的POST参数。 下面的代码定义了另一个模块文件中的处理函数: exports.auUpdateUserByEmail = (req, res) => { // This handler function will retrieve the POSTed params of user profile // and will attempt to update the existing user authentication as well as // the database profiles. // // This function accepts the following params: // 1. User email // 2. Phone […]

Firebase-admin不会写入数据库,不会出现错误

Firebasepipe理员不写入数据库。 我正在实例化数据库: var db = admin.database(); 然后设置一个我想要的表的引用: var systemsRef = db.ref("systems/"); 然后我有一个函数来检查'系统'(一个encryption的硬件ID)是否存在。 function isSystemRegistered(id){ var isTrue; systemsRef.once('value', function(snapshot) { isTrue = (snapshot.hasChild(id))? true : false; }); return isTrue; } 其中,至今仍然是false ; 这是true ,因为它还不存在。 如果系统不存在,则写入数据。 const sysID = getSysID(); var sys.info.name = generateUniqueSystemName(); if(isSystemRegistered(sysID){ console.log("system is already registered!"); } else { msystemsRef.set({ sysID : sys.info.name }, […]

如何检查https云function的身份validation?

我想弄清楚是否可以从客户端检查auth对象,调用firebase https云function来完成以下任务: 1)只允许validation过的电子邮件用户呼叫https端点,否则返回403。 2)以某种方式访问​​调用函数的客户端的uid,以便在数据库中设置节点像characters/:uid 。 原因是不允许重复的字符。 我可以在req.body中手动传递uid ,但这意味着任何人都可以摆弄这个,并通过发送任何types的uid作为req.body载荷来创build100个不同的字符。 只有解决方法我可以想到这是改变这种逻辑到数据库触发器,即客户端写入数据库void/characters/uid节点(数据库规则做这个整个validation),然后函数监听数据库中的这种变化,处理数据,并推动它characters/uid 但这意味着需要额外的逻辑,例如删除节点后,我不知道如何发回错误或成功的响应回到客户端,就像使用https函数,我们可以res.send(200)或发回错误。

为什么Firebase的云端function需要25秒?

为了清楚起见,我有其他的云function,它们都是间歇性地运行的(例如,从大约2-6秒的“冷”开始,并且全部使用相同的样板设置来导入pipe理实例并将该function作为模块输出) 我见过其他类似的post,但这实在是在烦扰我。 我有这样的云function: const admin = require('../AdminConfig'); const { reportError } = require('../ReportError'); module.exports = (event) => { const uid = event.params.uid; const snapshot = event.data; if (snapshot._newData === null ) { return null; } console.log('Create org begin running: ', Date.now()); const organisation = event.data.val(); const rootRef = admin.database().ref(); const ref = rootRef.child('/organisations').push(); const oid […]

在调用更新()数据库ref javascript的Firebase无效path

我正在使用Firebase node.js admin sdk通过csv导入器使用自定义uid创build用户帐户。 这一切工作正常。 在成功创build帐户我想更新数据库引用。 但是,只要函数循环在db中创build条目,它就会失败,并显示消息 未被捕获的错误:Firebase.child失败:第一个参数是无效的path:“contractors / jk116734s”。 path必须是非空string,不能包含“。”,“#”,“$”,“[”或“]” 正如您在上面的日志消息中所看到的那样,path中不包含任何不需要的字符,path也不是空的。 奇怪的是,它确实更新了数据库中的一条logging,但其他所有的logging都失败了。 path“承包商/ jk116734s”我也logging所有的path,没有不确定的或包含无效的字符。 网站的部分内容都是独一无二的。 这是我的function,每个成功的帐户创build被调用。 function createDbEtnryForUser(index, contractorData) { var ni = contractorData.ni; var path = "contractors/" + ni console.log(path); databaseRoot.ref(path).update(contractorData); databaseRoot.ref(path).once('value',function(snapshot) { $('#row-'+index).css({"background-color":"green", "color":"white"}); }); } 你也可以看到一个条目正在创build,但其余的不是。 奇怪的是,如果我不使用自定义的uid和使用由firebase创build的自动uids都工作正常。 我不明白的是,所有的帐户都是使用自定义uid创build的,正如您所看到的,我正在获取自定义uid,以便在调用中进行更新。

Firebasefunction可以在使用NodeJS从数据库中删除对象时从存储中删除文件

我是NodeJS的新手,我正在尝试为Firebase的云端函数编写下一个方法。 我正在努力实现的是: 当用户从Firebase DB中移除Photo对象时,该function应该被触发; 该代码应该从对应于Photo obj的存储中移除文件对象。 这些是我的Firebase数据库结构: 照片/ {userUID} / {} photoUID { "dateCreated": "2017-07-27T16:40:31.000000Z", "isProfilePhoto": true, "isSafe": true, "uid": "{photoUID}", "userUID": "{userUID}" } Firebase存储格式: 照片/ {userUID} / {} photoUID .PNG 和我正在使用的NodeJS代码: const functions = require('firebase-functions') const googleCloudStorage = require('@google-cloud/storage')({keyFilename: 'firebase_admin_sdk.json' }) const admin = require('firebase-admin') const vision = require('@google-cloud/vision')(); admin.initializeApp(functions.config().firebase) exports.sanitizePhoto = functions.database.ref('photos/{userUID}/{photoUID}') .onDelete(event […]

firebase队列 – 重试不起作用?

试图找出如何使重试工作。 这是我的FB队列的外观: { "specs" : { "default_spec" : { "retries" : 3, "timeout" : 60000 } }, "tasks" : { } } 这就是我正在testing如果重试工作: const queue = new Queue(getFirebaseRef(),{'numWorkers': 10} , function (data, progress, resolve, reject) { console.log('processing queue message:' + JSON.stringify(data)); progress(50); setTimeout(()=>{ reject(new Error("error while processing blabla")); },2000); }); 所以当我将新任务推送到队列中时,这是我的工作人员处理后的样子: { "-KcsTIDBAq1S_fdiwsv6" : { […]