我是.NET开发人员并学习MEAN堆栈,为简单的帖子和评论应用程序开发API。我使用的MVC模式没有视图,因为它是API。以下是我尝试创建模型函数的方法:
const User = module.exports = mongoose.model('User',UserSchema);
module.exports.getUsers = function(callback){
User.find()
.exec(function(err,list_users){
if(err) { callback(); }
return list_users;
});
}
这是控制器:
exports.user_list = function(req,res,next){
User.getUsers((err,list_users) => {
if(err){ next(err);}
res.json({user_list : list_users});
})
}
我收到错误,因为getUsers
未导入。我正在尝试将数据访问代码与控制器分开,并使控制器仅管理请求和响应,就像我在.NET中一样。任何帮助我怎样才能做到这一点?
答案 0 :(得分:0)
我会查看文档以熟悉如何使用mongoose。 我首先看到的是你没有根据这里的文档http://mongoosejs.com/docs/guide.html#methods正确定义方法。
但您不必定义find()函数。 Mongoose已经内置了它。 因此,下一步将是如何在控制器中创建模型实例。
你的模特应该是:
const mongoose = require('mongoose'),
UserSchema = mongoose.Schema();
const User = new UserSchema({
// define user
});
module.exports = mongoose.model('User',UserSchema);
控制器:
const User = require('path_to_User_model');
exports.user_list = function(req,res,next){
User.find((err,result)=>{
if(err)
// log err and send response
else
// send the result ex: res.json(result);
});
}
还可以阅读npmjs网站上的设置。 https://www.npmjs.com/package/mongoose
因此,要创建具有数据功能并让控制器使用该功能,您可以尝试
const mongoose = require('mongoose'),
UserSchema = mongoose.Schema();
const User = new UserSchema({
// define user
});
// data functions
User.methods.getUsers = function (){
User.find((err,result)=>{
if(err)
// log err and return something
return false;
else
return result;
});
}
module.exports = mongoose.model('User',UserSchema);
然后控制器
const User = require('path_to_User_model');
exports.user_list = function(req,res,next){
var users = User.getUsers();
if (!users)
res.status(500).send('error_page');
else
res.json(users);
}