7

I'm having some problems returning results from a module function.
Below are two files that I'm working with.

When I call the exported function it returns nothings.
Any suggestions/fixes as to why? Does it have to do with callbacks?

models/index.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;
    });

};

books.js

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

2 回答 2

21

您没有得到任何结果的原因是您试图从异步回调中同步返回一个函数值。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);
});
于 2013-09-19T00:51:55.227 回答
0

我以不同的方式解决类似的问题。我不确定这是否正确。

在主节点 js 中,我使用了一个名为 product 的模型。我将产品和资源传递给 misc.js。以下是我的 server.js 文件的一部分

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

在 misc.js 中按函数进行分组,并将该值直接返回到角度控制器。没有必要将结果返回给 server.js 和从 server.js 返回角度控制器。所以我觉得等待和其他回电似乎没有必要。在 misc.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);
        }
    });


};
于 2015-12-04T09:20:57.297 回答