我有一个NodeJS脚本,我在其中查看Firebase数据库中的树,以查看是否已通过child_added
,childed_changed
和{{添加/更改/删除了条目1}} Firebase管理员child_removed
功能的属性,以便将条目与我的Algolia数据库同步。
问题在于,当我在这些树上添加/更改/删除项目时,函数本身永远不会被触发。
然而,当我启动脚本时,我还有一个.on()
函数,我调用它可以正常工作。
例如,这是我的NodeJS脚本中的相关.once('value', initialImport)
代码:
child_added
这永远不会运行:/有什么我做错了吗?这曾经曾经有过一段时间。
更新:我遇到的问题是我在ref上调用了var dotenv = require('dotenv');
var firebaseAdmin = require("firebase-admin");
var algoliasearch = require('algoliasearch');
// load values from the .env file in this directory into process.env
dotenv.load();
var serviceAccount = require("./serviceAccountKey.json");
firebaseAdmin.initializeApp({
credential: firebaseAdmin.credential.cert(serviceAccount),
databaseURL: process.env.FIREBASE_DATABASE_URL
});
var database = firebaseAdmin.database();
var algolia = algoliasearch(process.env.ALGOLIA_APP_ID, process.env.ALGOLIA_API_KEY);
var users = algolia.initIndex('users');
var bandsRef = database.ref("/social/bands");
bandsRef.on('child_added', addOrUpdateBandIndexRecord);
/**
* Add or update a band index record
*/
function addOrUpdateBandIndexRecord(dataSnapshot) {
// Get Firebase object
var firebaseObject = dataSnapshot.val();
// Specify Algolia's objectID using the Firebase object key
firebaseObject.objectID = dataSnapshot.key;
// Add or update object
bands.saveObject(firebaseObject, function(err, content) {
if (err) {
throw err;
}
console.log('Firebase<>Algolia band object saved', firebaseObject.objectID);
});
}
我正在添加.once()
,这导致了冲突。删除.on('child_added')
的代码后,它解决了同步问题。为了进行初始导入,您很可能希望将该代码放在单独的节点文件中。无论如何,这对我有用。