nodejs Controller层 封装

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wowkk/article/details/51623196

作者:短工邦技术部 - 陈文哲

封装了MODEL层后,我们要操作哪张表,就定义对应的MODEL变量出来就行了。但还是很麻烦,一个业务可能要操作多张表…有没有办法定义一个db变量,我想怎么操作数据就怎么操作数据?

抛开安全性等,答案是有的,而且比较简单。 
先看下封装后的目录结构

  • MODEL 
    • BaseMODEL.js
    • UserMODEL.js
  • Controller 
    • oData.js
    • NormalController.js
  • rount.js

BaseMODEL.js

exports.statics = {
    Find : function( query, data ) {
        if(!query.limit){
            query.limit = 1000;
        }
        if(!query.order){
            query.order = "-createdAt";
        }
        if(!query.include){
            query.include = "";
        }
        return this.find(query.where).populate(query.include).limit(query.limit).sort(query.order).exec( data );
    },
    Update : function( query,data){
        query.data.updatedAt = Date.now();
        return this.update({_id:query._id},query.data).exec(data);
    }
};

UserMODEL.js

var Schema = require('mongoose').Schema;
var MODEL = Schema({
    UserName: String,
    Password: String
    createdAt:{
        type:Date,
        default:Date.now()
    },
    updatedAt:{
        type:Date,
        default:Date.now()
    }
}, {collection: "User"});
//定义该MODEL的能提供的数据操作
var BaseMODEL = require("./BaseMODEL");
MODEL.statics = BaseMODEL.statics;

/* global db */
module.exports = db.model('UserMODEL', MODEL);

oData.js

exports.find = function(inputData,callback){
    var MODEL;
    if(inputData.table == "User"){
        MODEL = require("../MODEL/UserMODEL");
    }
    //else if 控制可以操作哪些表
    if(MODEL){
        MODEL.Find({
            "where":inputData.where,
            "include":inputData.include,
            "limit":inputData.limit,
            "skip":inputData.skip
        },function(err,data){
            //回调
            callback(err,data)
        });
    }
}

NormalController.js

var db = require("./oData");

exports.index = function(req, res) {
    db.find({
        "table":"User",
        "where":{
            "Type":"Admin"
        }
    },function(err,data){
        console.log(data);
        //还可以继续操作
        db.find({
            "table":"User",
            "where":{
                "Type":"User"
            }
        },function(err,data){
            console.log(data);
            //还可以继续操作
            res.render('index',data);
        });
    });
}

现在写业务是不是简单多了?但还能不能继续扩展?赶紧扩展下去可以变成一个框架了的样子……

猜你喜欢

转载自blog.csdn.net/wowkk/article/details/51623196