nodejs MODEL层 封装(一)

来源:互联网 发布:手机淘宝查看分类 编辑:程序博客网 时间:2024/05/16 20:27

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

node.js+express.js+mongooes+jade一圈走下来,感觉还是不够简便,概念也比较混乱,所以我着手按我的思路重新优化了这个框架。重点是优化MODEL层,从mongoose下手。

优化后的MODEL代码,举个栗子

var Schema = require('mongoose').Schema;var MODEL = Schema({    Advertiser: {type:Schema.Types.ObjectId,ref:'UserMODEL'},    Name: String,  //任务名称    Intro: String,    createdAt:{        type:Date,        default:Date.now()    },    updatedAt:{        type:Date,        default:Date.now()    }}, {collection: "Plan"});//  定义该MODEL的能提供的数据操作//  这里就是封装重点!//  1:为了让应用层按一定的规范来获取数据//  2:让MODEL层保持一致,而不是乱七八糟为应用层提供各种各样的方法。MODEL.statics = {    Find : function( query, data ) {        if(!query.limit){            //默认限制1000条结果            query.limit = 1000;        }        if(!query.order){            //默认按“创建时间”倒序排列            query.order = "-createdAt";        }        if(!query.include){            //这里传入是否要获取外建表的数据            //mongoose是调用populate方法,但这个单词不好理解,我就改成include了~            query.include = "";        }        return this.find(query.where).populate(query.include).limit(query.limit).sort(query.order).exec( data );    },    Update : function( query,data){        return this.update({_id:query._id},query.data).exec(data);    }};//每一次保存之前会调用这个方法,更新数据的“更新时间”MODEL.pre("save",function(next) {    if(this.isNew){        this.createdAt = this.updatedAt = Date.now();    }    else{        this.updatedAt = Date.now();    }    next();});/* global db */module.exports = db.model('UserMODEL', MODEL);

然后,应用层(Controller)就可以这样子操作了

//广告计划管理exports.get_plan = function(req, res) {    PlanMODEL.Find({        "where":{            "Name":"计划名"        },        "include":"Advertiser"    },function(err,data){        var newData = [];        for(var i=0;i<data.length;i++){            newData.push({                "PlanName":data[i].Name,                "UserName":data[i].Advertiser.Name            });        }        res.render('Admin/plan',{"data":data});    });};

还能不能更简单?封装得更加无死角?

0 0
原创粉丝点击