【发布时间】:2018-05-31 09:04:11
【问题描述】:
我在 Firebase 项目中使用多个数据库。主(默认)数据库的云功能很好用,但是,我不能让它们为辅助数据库工作。例如,我想在具有管理员权限的节点上发出读取请求:
//this works
admin.database().ref(nodePath).once('value')...
这在主数据库中有效,但是,如果我想在另一个数据库上执行命令,它就不起作用:
//this doesn't work
admin.database(secondaryDatabaseUrl).ref(nodePath).once('value')...
虽然功能已部署,但在尝试执行云功能时控制台出现错误。
这是带有 https 触发器的云函数的代码:
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
const secureCompare = require('secure-compare');
exports.testFunction= functions.https.onRequest((req, res) => {
const key = req.query.key;
// Exit if the keys don't match
if (!secureCompare(key, functions.config().cron.key)) {
console.error('keys do not match');
res.status(403).send('error1');
return;
}
//test read request
//the line below crashes the function
return admin.database('https://secondary_db_url.firebaseio.com').ref(`/testNode`).once('value').then(dataSnapshot=> {
console.log('value', dataSnapshot.val());
return;
}).catch(er => {
console.error('error', er);
res.status(403).send('error2');
});
});
以下是 Firebase 控制台中的错误日志:
TypeError: ns.ensureApp(...).database is not a function
at FirebaseNamespace.fn (/user_code/node_modules/firebase-admin/lib/firebase-namespace.js:251:42)
at exports.testFunction.functions.https.onRequest (/user_code/index.js:16:16)
at cloudFunction (/user_code/node_modules/firebase-functions/lib/providers/https.js:26:41)
at /var/tmp/worker/worker.js:671:7
at /var/tmp/worker/worker.js:655:9
at _combinedTickCallback (internal/process/next_tick.js:73:7)
at process._tickDomainCallback (internal/process/next_tick.js:128:9)
如果我不指定辅助数据库 URL,该函数将在我的主数据库上发出读取请求,效果很好:
//this works
return admin.database().ref(`/testNode`).once('value').then(dataSnapshot=> {
...
我正在使用最新的 SDK 版本:"firebase-admin": "^5.5.1" 和 "firebase-functions": "^0.7.3"
那么,如何使用管理员权限在云函数中获取辅助数据库的实例?
【问题讨论】:
-
这真的是日志中唯一有用的东西吗?请显示演示问题的完整代码。你是否从 Promise 中发现错误?
-
嗨,Doug,您可以查看我更新的问题。实际上,Firebase 控制台中的错误日志在几分钟后开始出现,这就是为什么我之前没有指定它们的原因。
标签: javascript firebase firebase-realtime-database google-cloud-functions firebase-admin