我在从模块功能返回结果时遇到一些问题 以下是我正在使用的两个文件。
当我调用导出的函数时,它返回nothings 有什么建议/修复原因吗?它与回调有关吗?
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
答案 0 :(得分:17)
你没有得到结果的原因是你试图从异步回调中同步返回一个函数值。而不是提供函数值,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);
});
答案 1 :(得分:0)
在主节点js中我使用的是名为product的模型。我正在将产品和res传递给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);
}
});
};