Я пишу скрипт nodejs для записи данных из коллекции MongoDB в индекс поиска Elastic. В mongodb 270 документов, которые мне нужно передать в ES, но проблема в том, что каждый раз, когда я запускаю скрипт, несколько случайных документов выдают ошибку, которую я не могу понять, почему.
Я использую MacOS, и ES, и mongoDB размещаются локально. MongoDB находится на порте 27017 и ES на 9200.
const url = 'mongodb://localhost:27017/';
const esClient = new elasticsearch.Client({
host: 'localhost:9200',
log: 'error'
});
MongoClient.connect(url, {useNewUrlParser: true}, function(err, db){
if(err) throw err;
var dbo = db.db('rxclinic_test');
var collection = dbo.collection('sessions');
collection.find().toArray(function(err, result){
if(err) throw err;
bulkIndex('temp', '_doc', result);
db.close();
});
})
function bulkIndex(index, type, data){
data.forEach(item => {
esClient.index({
index: index,
type: "_doc",
body: {
sessions: item.sessions
}
}).then(response => console.log(`item indexed`))
.catch(e => {
console.log(`an error occurred`);
throw e;
});
});
}
Это сгенерированная ошибка:
произошла ошибка
(узел: 14016) UnhandledPromiseRejectionWarning: Ошибка: [remote_transport_exception] [Bhavays-MacBook-Air.local] [127.0.0.1:9300] [индексы: данные / запись / объем [s] [p]]
при ответе (/Users/bhavayanand/Desktop/rxlabs/es/node_modules/elasticsearch/src/lib/transport.js:308:15)
в checkRespForFailure (/Users/bhavayanand/Desktop/rxlabs/es/node_modules/elasticsearch/src/lib/transport.js:267:7)
на HttpConnector. (/Users/bhavayanand/Desktop/rxlabs/es/node_modules/elasticsearch/src/lib/connectors/http.js:166:7)
на IncomingMessage.wrapper (/Users/bhavayanand/Desktop/rxlabs/es/node_modules/lodash/lodash.js:4935:19)
на IncomingMessage.emit (events.js: 187: 15)
в endReadableNT (_stream_readable.js: 1094: 12)
at process.internalTickCallback (internal / process / next_tick.js: 72: 19)
(узел: 14016) UnhandledPromiseRejectionWarning: необработанное отклонение обещания. Эта ошибка возникла либо из-за того, что внутри асинхронной функции возникла ошибка без блока catch, либо из-за отклонения обещания, которое не было обработано с помощью .catch (). (код отклонения: 5)