Я следил за этими Algolia/Firebase docs. Я немного подкорректировал, поскольку некоторые из первоначальных инструкций по установке устарели, но я получил его для работы. Я поместил весь код с этой страницы в файл app.js. Внутри терминала я запускал «npm start», и когда я проверил свою консоль Algolia, индексы успешно проиндексировали мои данные Firebase.Algolia/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
Как я сказал объект был проиндексирован (я только имел 1 объект внутри Firebase).
Проблема после окончательного заявления Firebase<>Algolia import done
, ничего не происходит.
Терминал просто находится в состоянии, которое выглядит так, как будто оно ожидает отправки большего количества данных или получения дополнительных инструкций. Он ничего не делает. Я должен нажать CTRL + C, чтобы выйти.
Что ждет терминал и почему он не выходит сам по себе, когда он индексирует все, начиная от FB?