2015-10-22 1 views
0

Новый узел и, похоже, не может пройти мимо этого. Попытка разобрать каждую строку из csv и сохранить ее в db с помощью мангуста.Как убедиться, что обратный вызов сохранения мангуста запущен до того, как он отключится при синтаксическом анализе csv?

csv.fromPath("tests.csv", { objectMode: true, headers: true, ignoreEmpty: true}) 
.on("data", function(data){ 
    var test = new Test(data); 
    test.save(function(err, test) { 
     if(err) return console.error(err); 
     console.log(test); 
     console.log(test.name + ' saved!'); 
    }); 
}) 
.on("end", function(){ 
    mongoose.disconnect(); 
}); 

В console.log не будет работать, потому что мангуст отсоединяется до тех обратных вызовов выполняются:

{ [MongoError: server localhost:27017 sockets closed] 

ответ

0

Ваш конечный обработчик вызывается после того, как файл CSV был разобран, но прежде чем вы сохранил данные в монго. Вы можете переместить метод отключения в экономии обратного вызова:

csv.fromPath("tests.csv", { objectMode: true, headers: true, ignoreEmpty: true}) 
    .on("data", function(data){ 
     var test = new Test(data); 
     test.save(function(err, test){ 
      if(err) return console.error(err); 
      mongoose.disconnect()}); 
}); 

Однако, это не обычный шаблон для разрыва соединения мангуста после взаимодействия с базой данных. Если у вас есть обратные вызовы в вашем скрипте, просто вызовите process.exit() в конечном сокровенном или окончательном одном:

csv.fromPath("tests.csv", { objectMode: true, headers: true, ignoreEmpty: true}) 
    .on("data", function(data){ 
     var test = new Test(data); 
     test.save(function(err, test) { 
      if(err) console.error(err); 
      process.exit(); 
     }); 
    }); 

Я не думаю, что называя mongoose.disconnect() будет прекратить ваш скрипт. О, и не возвращайтесь к ошибке, просто зарегистрируйте ошибку и выйдите из процесса. Если вы вернетесь при ошибке, скрипт также не завершится.

+0

Это всего лишь сценарий, который я пишу для импорта данных. Мой терминал зависает, если разъединение не является явным. Как следует использовать мангуст в этом случае? – user1411469

+0

Я все время пишу сценарии. Обычно я вызываю process.exit() или заканчивается, когда хочу закончить такой скрипт. Извините, я нахожусь на своем телефоне, а не перед компьютером :) –