Это нормально, что 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`);
});