nodejs Controller层 封装

nodejs Controller层 封装

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

封装了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);        });    });}

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

推荐阅读