Задать вопрос
yarkov
@yarkov
Помог ответ? Отметь решением.

Почему может не работать импорт через Mongoose?

Написал для себя небольшой скрипт:
// Модуль для работы с файлом конфигурации
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);
});

В итоге без ошибок выдает строку:
Успешно импортировано записей: 0 из 26

Импорта не происходит. ЧЯДНТ? Во всем остальном проекте запись в БД идет именно так и все работает, а тут видите ли не нравится что-то...
  • Вопрос задан
  • 238 просмотров
Подписаться 1 Оценить 1 комментарий
Решения вопроса 1
bingo347
@bingo347 Куратор тега Node.js
Crazy on performance...
ЧЯДНТ?
не дожидаетесь выполнения асинхронной задачи и завершаете процесс
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы