A
A
Alexey Yarkov2016-05-18 23:21:58
Node.js
Alexey Yarkov, 2016-05-18 23:21:58

Why might import via Mongoose not work?

I wrote a small script for myself:

// Модуль для работы с файлом конфигурации
var config = require('../server/config');

// Модуль для работы с ФС
var fs = require('fs');

// Модуль для работы с MongoDB
var mongoose = require('mongoose');

var myArgs = require('minimist')(process.argv.slice(2));

var help = [
    'Чтобы импортировать файл команда должна иметь следующий формат:\n',
    '-h[--help] - вывод справки\n',
    '[*] -f[--file] - путь к файлу импорта\n',
    '[*] -m[--model] - имя модели, в которую нужно произвести импорт\n',
    '-l[--log] - выводить лог импорта в консоль\n',
    'Пример правильной команды:\n',
    'node ./migrate/index.js --file ./migrate/data/keeper.json --model Keeper'
    ].join(" ");

if (myArgs.h || myArgs.help || Object.keys(myArgs).length === 1) {
    console.log(help);
    process.exit(0);
}

if (myArgs.file || myArgs.f) {
    var filename = myArgs.file || myArgs.f;
}
else{
    console.log("Не указан файл для импорта! Используйте параметр --help для справки!");
    process.exit(0);
}
 
if (myArgs.model || myArgs.m) {
    var modelname = myArgs.model || myArgs.m;
}
else{
    console.log("Не указана модель для импорта! Используйте параметр --help для справки!");
    process.exit(0);
}

// Подсоединяемся к БД
var db_conn_string = config.get('db:uri') + ':' + config.get('db:port') + '/' + config.get('db:name');
mongoose.connect(db_conn_string);

// Подключаем модели БД
var models = require('../server/models');

if(!models[modelname]){
    console.log("Модель "+modelname+" не найдена!");
    process.exit(0);
}

var importJson = fs.readFile(filename, 'utf-8', function(err, data){
    if(err){
        console.log(err);
        console.log("Не удалось прочитать файл "+filename+"!");
        process.exit(0);
    }
    var counter = 0;
    data = JSON.parse(data);

    data.forEach(function(saveObject, i, arr){
        var SAVE = new models[modelname](saveObject);
        SAVE
            .save(saveObject, function(err, data){
                if(err){
                    console.log(err);
                    console.log("Не удалось импортировать запись №%d!", i+1);
                    if(myArgs.log || myArgs.l){
                        console.log("ERROR: %d - неудача", i+1);
                    }
                }
                else{
                    counter++;
                    if(myArgs.log || myArgs.l){
                        console.log("SUCCESS: %d - успешно", i+1);
                    }
                }
            });
    });
    console.log("Успешно импортировано записей: %d из %d", counter, data.length);
    mongoose.connection.close();
    process.exit(0);
});

As a result, without errors, it gives the line:
Successfully imported records: 0 out of 26
No import occurs. CHADNT? In the rest of the project, writing to the database goes exactly like this and everything works, but here you see, you don’t like something ...

Answer the question

In order to leave comments, you need to log in

1 answer(s)
D
Dmitry Belyaev, 2016-05-19
@yarkov

CHADNT?
do not wait for the asynchronous task to complete and end the process

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question