2016-11-10 6 views
1

Я пытаюсь интегрировать Firebase Flashlight с ElasticSearch в мое приложение Node.js, чтобы выполнять операции поиска по моим коллекциям Firebase. Я хочу сделать это в api.js, где определить маршруты поиска (например: myhost: myport/ search/mycollection/:key).Как интегрировать фонарь Firebase в мое приложение

Проблема в том, что myport отличается от того, на котором работает ElasticSearch (что составляет 9200).

Я хочу по маршруту: myhost: myport/whatever, чтобы запустить мое приложение, и по маршруту myhost: myport/ search/mycollection/:key, чтобы запустить поиск, который теперь доступен по адресу myhost:9200.

Как я могу интегрировать их в Express?

Когда я конфиг ElasticSearch, я использую:

var config = { 
     host: 'localhost', 
     port: 9200, 
     log: 'trace' 
}; 
var esc = new ElasticSearch.Client(config); 

ответ

1

Это нормально, что Elastic Search будет работать на другой порт, чем ваш Экспресс приложения. На самом деле, вы можете не иметь два сервера, работающих на том же порту.

Фонарик больше похож на другое приложение, которое необходимо запустить на вашем сервере. Используя npm start или npm monitor, вы можете запустить процесс фонарика после настройки файла конфигурации. Фонарик позаботится, чтобы предоставить вам данные из Firebase в Elastic Search.

Чтобы взаимодействовать с Elastic Search, вам просто нужно использовать модуль узла. Вы уже это делаете. Эластичный поиск будет работать на порту 9200, как вы упомянули, в то время как приложение Express будет работать на другом порту (например, 3000).

Вдохновленный от фонарика, я создал Elasticfire, который имеет несколько функций, которые не имеют Фонарик (например, объединения), и могут быть использованы в качестве библиотеки в вашем приложении.

const ElasticFire = require("elasticfire"); 

// Initialize the ElasticFire instance 
let ef = new ElasticFire({ 

    // Set the Firebase configuration 
    firebase: { 
     apiKey: "AI...BY", 
     authDomain: "em...d.firebaseapp.com", 
     databaseURL: "https://em...d.firebaseio.com", 
     storageBucket: "em...d.appspot.com", 
     messagingSenderId: "95...36" 
    } 

    // Firebase paths and how to index them in Elasticsearch 
    , paths: [ 
     { 
      // Firebase path 
      path : "articles" 

      // Elasticsearch index and type 
     , index: "articles" 
     , type : "article" 

      // Optional joined fields 
     , joins: [ 
       // The `author` is a field from the article 
       // which points to the `users` collection. 
       { 
        path: "users" 
       , name: "author" 
       } 

       // If we have an array of comment ids, pointing 
       // to another collection, then they will be joined too 
      , { 
        path: "comments" 
       , name: "comments" 
       } 
      ] 

      // Filter out some data 
     , filter: (data, snap) => snap.key !== "_id" 
     } 
    ] 
}); 

// Listen for the events emitted by 
// the ElasticFire instanceand output some data 
ef.on("error", err => { 
    console.error(err); 
}).on("index_created", name => { 
    console.log(`${name} created`); 
}).on("index_updated", name => { 
    console.log(`${name} updated`); 
}).on("index_deleted", name => { 
    console.log(`${name} deleted`); 
}); 
Смежные вопросы