модуль.функция экспорта не возвращает результаты

у меня возникли проблемы с возвратом результатов из функции модуля.
Ниже приведены два файла, с которыми я работаю.

когда я вызываю экспортированную функцию, она возвращает nothings.
Любые предложения / исправления относительно почему? Это имеет отношение к обратным вызовам?

модели индекса/.js

module.exports = exports = function(library) {    
    modCodes.findOne({name: library}, {modcode:1}, function(err, mc) {
      if (err) throw new Error(err);
      var db = mongoose.createConnection('mongodb://localhost:27017/' + mc.modcode + '?safe=true');
      var models = {
        Books: db.model('books', require('./schemas/books'))
        }

        return models;
    });

};

книги.js

var Models = require('../models');    
console.log(Models("myLibrary")); //return nothing

2 ответов


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

module.exports = exports = function(library, callback) {
  modCodes.findOne({name: library}, {modcode: 1}, function (err, mc) {
    if (err) throw new Error(err);
    var db = mongoose.createConnection('mongodb://localhost:27017/' + mc.modcode + '?safe=true');
    var models = {
      Books: db.model('books', require('./schemas/books'))
    }
    callback(models);
  });
};

и вот как вы сможете его использовать:

var Models = require('../models');    
Models('myLibrary', function(models) {
  console.log(models);
});

Я решаю аналогичную проблему по-разному. Я не уверен, что это правильный путь.

в главном узле js я использую модель с именем product. Я передаю продукт и res в разное.js. Следующее является частью моего сервера.файл JS

var misc = require('./misc');
app.get('/groupbyCategory', function(req,res,next)
   {
     var res2; 
     misc.addX(product,res);
    })

в разное время.js делает группу по функции и вернет это значение прямому пути к угловому контроллеру. это Не надо возврат результата на сервер.js и от сервера.js для возврата углового контроллера. Я чувствую ... ожидание и другие перезвоны кажутся ненужными. Внутри разное.js я продолжаю следовать коду.

exports.addX = function(product,res) {
 product.aggregate([

 { $group: {
 _id: {category: "$category"},
     count: { $sum: 1 }
        }}    
     ], function (err, result) {
     if (err) {
     console.log(err);
     return err; 
       }
       else
       {  
       //return result;

        console.log(result);
        res.send(result);
        }
    });


};