Algolia/Firebase - 终端执行代码然后闲置
Algolia/Firebase - Terminal executes code then sits idle
我关注了这些 Algolia/Firebase docs。我做了一些调整,因为一些初始设置说明已经过时,但我让它工作了。我将该页面中的所有代码放入我的 app.js 文件中。在终端内,我 运行 'npm start' 并且当我检查我的 Algolia 控制台时,Indices 成功地索引了我的 Firebase 数据。
app.js
var admin = require("firebase-admin");
admin.initializeApp({
credential: admin.credential.cert({
projectId: "*****",
clientEmail: "*****",
privateKey: "-----BEGIN PRIVATE KEY-----\n...code...\n-----END PRIVATE KEY-----\n"
}),
databaseURL: "*****.firebaseio.com"
});
var firebase = require('firebase');
var config = {
apiKey: "*****",
authDomain: "*****.firebaseapp.com",
databaseURL: "*****.firebaseio.com",
storageBucket: "*****.appspot.com",
messagingSenderId: "*****"
};
firebase.initializeApp(config);
var algoliasearch = require('algoliasearch');
var client = algoliasearch('*******', '***...**');
var index = client.initIndex('posts');
// Connect to our Firebase contacts data
var rootRef = firebase.database().ref('posts');
// Get all data from Firebase
rootRef.on('value', initIndex);
function initIndex(dataSnapshot) {
// Array of data to index
var objectsToIndex = [];
// Get all objects
var values = dataSnapshot.val();
// Process each Firebase ojbect
for (var key in values) {
if (values.hasOwnProperty(key)) {
// Get current Firebase object
var firebaseObject = values[key];
// Specify Algolia's objectID using the Firebase object key
firebaseObject.objectID = key;
// Add object for indexing
objectsToIndex.push(firebaseObject);
}
}
// Add or update new objects
index.saveObjects(objectsToIndex, function(err, content) {
if (err) {
throw err;
}
console.log('Firebase<>Algolia import done');
});
}
rootRef.on('value', reindexIndex);
function reindexIndex(dataSnapshot) {
// Array of objects to index
var objectsToIndex = [];
// Create a temp index
var tempIndexName = 'contacts_temp';
var tempIndex = client.initIndex(tempIndexName);
// Get all objects
var values = dataSnapshot.val();
// Process each Firebase object
for (var key in values) {
if (values.hasOwnProperty(key)) {
// Get current Firebase object
var firebaseObject = values[key];
// Specify Algolia's objectID using the Firebase object key
firebaseObject.objectID = key;
// Add object for indexing
objectsToIndex.push(firebaseObject);
}
}
// Add or update new objects
index.saveObjects(objectsToIndex, function(err, content) {
if (err) {
throw err;
}
// Overwrite main index with temp index
client.moveIndex(tempIndexName, 'contacts', function(err, content) {
if (err) {
throw err;
}
console.log('Firebase<>Algolia reimport done');
});
});
}
// Listen for changes to Firebase data
rootRef.on('child_added', addOrUpdateObject);
rootRef.on('child_changed', addOrUpdateObject);
function addOrUpdateObject(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
index.saveObject(firebaseObject, function(err, content) {
if (err) {
throw err;
}
console.log('Firebase<>Algolia object saved');
});
}
// Listen for changes to Firebase data
rootRef.on('child_removed', removeIndex);
function removeIndex(dataSnapshot) {
// Get Algolia's objectID from the Firebase object key
var objectID = dataSnapshot.key;
// Remove the object from Algolia
index.deleteObject(objectID, function(err, content) {
if (err) {
throw err;
}
console.log('Firebase<>Algolia object deleted');
});
}
终端执行了以下语句:
>node app.js
Firebase<>Algolia reimport done
Firebase<>Algolia object saved
Firebase<>Algolia import done
//terminal just sits idle from this point on
正如我所说,对象已编入索引(我在 Firebase 中只有 1 个对象)。
问题出在最后的 Firebase<>Algolia import done
语句之后,没有任何反应。
终端处于一种似乎正在等待发送更多数据或给出更多指令的状态。它什么都不做。我必须按 CTRL+C 才能退出。
终端在等待什么?为什么它在从 FB 索引所有内容后不自行退出?
我参加了一个聚会,有人指出,如果我将新数据添加到我的 Firebase 数据库中,那么它会自动在 Algolia 中建立索引。这意味着终端闲置的原因是它仍在监听事件。基本上它不应该停止停留,这样它就可以继续搜索。
我关注了这些 Algolia/Firebase docs。我做了一些调整,因为一些初始设置说明已经过时,但我让它工作了。我将该页面中的所有代码放入我的 app.js 文件中。在终端内,我 运行 'npm start' 并且当我检查我的 Algolia 控制台时,Indices 成功地索引了我的 Firebase 数据。
app.js
var admin = require("firebase-admin");
admin.initializeApp({
credential: admin.credential.cert({
projectId: "*****",
clientEmail: "*****",
privateKey: "-----BEGIN PRIVATE KEY-----\n...code...\n-----END PRIVATE KEY-----\n"
}),
databaseURL: "*****.firebaseio.com"
});
var firebase = require('firebase');
var config = {
apiKey: "*****",
authDomain: "*****.firebaseapp.com",
databaseURL: "*****.firebaseio.com",
storageBucket: "*****.appspot.com",
messagingSenderId: "*****"
};
firebase.initializeApp(config);
var algoliasearch = require('algoliasearch');
var client = algoliasearch('*******', '***...**');
var index = client.initIndex('posts');
// Connect to our Firebase contacts data
var rootRef = firebase.database().ref('posts');
// Get all data from Firebase
rootRef.on('value', initIndex);
function initIndex(dataSnapshot) {
// Array of data to index
var objectsToIndex = [];
// Get all objects
var values = dataSnapshot.val();
// Process each Firebase ojbect
for (var key in values) {
if (values.hasOwnProperty(key)) {
// Get current Firebase object
var firebaseObject = values[key];
// Specify Algolia's objectID using the Firebase object key
firebaseObject.objectID = key;
// Add object for indexing
objectsToIndex.push(firebaseObject);
}
}
// Add or update new objects
index.saveObjects(objectsToIndex, function(err, content) {
if (err) {
throw err;
}
console.log('Firebase<>Algolia import done');
});
}
rootRef.on('value', reindexIndex);
function reindexIndex(dataSnapshot) {
// Array of objects to index
var objectsToIndex = [];
// Create a temp index
var tempIndexName = 'contacts_temp';
var tempIndex = client.initIndex(tempIndexName);
// Get all objects
var values = dataSnapshot.val();
// Process each Firebase object
for (var key in values) {
if (values.hasOwnProperty(key)) {
// Get current Firebase object
var firebaseObject = values[key];
// Specify Algolia's objectID using the Firebase object key
firebaseObject.objectID = key;
// Add object for indexing
objectsToIndex.push(firebaseObject);
}
}
// Add or update new objects
index.saveObjects(objectsToIndex, function(err, content) {
if (err) {
throw err;
}
// Overwrite main index with temp index
client.moveIndex(tempIndexName, 'contacts', function(err, content) {
if (err) {
throw err;
}
console.log('Firebase<>Algolia reimport done');
});
});
}
// Listen for changes to Firebase data
rootRef.on('child_added', addOrUpdateObject);
rootRef.on('child_changed', addOrUpdateObject);
function addOrUpdateObject(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
index.saveObject(firebaseObject, function(err, content) {
if (err) {
throw err;
}
console.log('Firebase<>Algolia object saved');
});
}
// Listen for changes to Firebase data
rootRef.on('child_removed', removeIndex);
function removeIndex(dataSnapshot) {
// Get Algolia's objectID from the Firebase object key
var objectID = dataSnapshot.key;
// Remove the object from Algolia
index.deleteObject(objectID, function(err, content) {
if (err) {
throw err;
}
console.log('Firebase<>Algolia object deleted');
});
}
终端执行了以下语句:
>node app.js
Firebase<>Algolia reimport done
Firebase<>Algolia object saved
Firebase<>Algolia import done
//terminal just sits idle from this point on
正如我所说,对象已编入索引(我在 Firebase 中只有 1 个对象)。
问题出在最后的 Firebase<>Algolia import done
语句之后,没有任何反应。
终端处于一种似乎正在等待发送更多数据或给出更多指令的状态。它什么都不做。我必须按 CTRL+C 才能退出。
终端在等待什么?为什么它在从 FB 索引所有内容后不自行退出?
我参加了一个聚会,有人指出,如果我将新数据添加到我的 Firebase 数据库中,那么它会自动在 Algolia 中建立索引。这意味着终端闲置的原因是它仍在监听事件。基本上它不应该停止停留,这样它就可以继续搜索。