2017-02-14 18 views
0

Я следил за этими 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?

ответ

0

Я пошел в Meetup, и кто-то указал, что если я добавлю новые данные в свою базу данных Firebase, то он автоматически индексируется внутри Algolia. Это означало, что терминал сидел без дела, потому что он все еще слушал события. В принципе, он не должен останавливаться, чтобы он мог непрерывно искать.