在我的群组模型中,我导出一个使用回调传递查询结果的函数。
在我的路由器文件中,在正确需要其他文件后,我正在调用此函数。
那是我的./models/groups.js
:
var groupSchema = new mongoose.Schema({
[...]
module.exports.getAll = function(cb) {
groupSchema.find({}, function(err, groups) {
if (err) return cb(err)
cb(null, groups)
})
}
[...]
module.exports = mongoose.model('Group', groupSchema);
那是我的./routes/groups.js
文件。
var Group = require('../models/group')
router.route('/groups')
.get(function(req, res, next) {
Group.getAll( function(err, group){
if (err) res.send(err)
res.send(group)
})
})
[...]
这不起作用,因为每次收到请求时,我都会收到TypeError: undefined is not a function
错误。我知道我可以在我的路由器文件上进行查询,但我认为在路由和方法之间分离是更好的做法。
答案 0 :(得分:1)
在为getAll
分配新值时,您将覆盖定义module.exports
函数的对象。
你有两个选择:
使用getAll
功能扩展模型,并像今天一样导出
这基本上看起来像:
var model = mongoose.model('Group', groupSchema);
model.getAll = function(cb) {
...
};
module.exports = model;
但那不是很“干净”。
在getAll
函数旁边的指定属性下导出模型
这基本上是这样的:
module.exports.getAll = function(cb) {
...
};
module.exports.model = mongoose.model('Group', groupSchema);
然后在您的路线中,您将拥有:
var Groups = require('../models/group');
// Now you have Groups.getAll & Groups.model
整体上更灵活,您可以根据需要导出其他类型/功能/值。