Ich folgte diese Algolia/Firebase docs. Ich habe ein bisschen getwittert, da einige der ersten Setup-Anweisungen veraltet sind, aber ich habe es zum Laufen gebracht. Ich habe den gesamten Code von dieser Seite in meine app.js-Datei geschrieben. Im Terminal lief 'npm start' und als ich meine Algolia-Konsole überprüfte, indizierte die Indices meine Firebase-Daten erfolgreich.Algolia/Firebase - Terminal führt den Code dann im Leerlauf
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');
});
}
-Terminal ausgeführt, um die folgenden Aussagen:
>node app.js
Firebase<>Algolia reimport done
Firebase<>Algolia object saved
Firebase<>Algolia import done
//terminal just sits idle from this point on
Wie gesagt das das Objekt indiziert wurde (ich habe nur 1 Objekt in Firebase). Das Problem ist nach der endgültigen Firebase<>Algolia import done
Anweisung passiert nichts.
Terminal befindet sich gerade in einem Zustand, der darauf wartet, dass mehr Daten gesendet werden oder mehr Anweisungen gegeben werden müssen. Es tut nichts. Ich muss STRG + C drücken, um zu beenden.
Worauf wartet das Terminal und warum wird es nicht von selbst beendet, wenn es alles von FB indiziert?