如何在模型中执行数据库相关代码

时间:2018-01-01 05:56:57

标签: node.js express

我是.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中一样。任何帮助我怎样才能做到这一点?

1 个答案:

答案 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);
}