2017-02-14 7 views
0

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?

Antwort

0

Ich ging zu einem Meetup und jemand wies darauf hin, dass, wenn ich neue Daten zu meiner Firebase-Datenbank hinzufügte, diese automatisch in Algolia indiziert wurden. Das bedeutete, dass Terminal im Leerlauf war, weil es immer noch auf Ereignisse wartete. Im Grunde sollte es nicht aufhören zu bleiben, damit es kontinuierlich suchen kann.

Verwandte Themen