nodejs MODEL层 封装(一)
来源:互联网 发布:绿尾真假辨别技巧知乎 编辑:程序博客网 时间:2024/06/06 05:25
作者:短工邦技术部 - 陈文哲
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
- nodejs MODEL层 封装(一)
- nodejs MODEL层 封装(一)
- nodejs MODEL层 封装(二)
- nodejs MODEL层 封装(二)
- nodejs Controller层 封装
- nodejs Controller层 封装
- Nodejs 学习一 NodeJs helloworld 简单封装
- Nodejs连接sqlserver数据层封装
- Android当中的MVP模式(五)封装之后的OkHttp工具在Model层
- 数据库层model使用基本类型 View层model使用封装类型
- JavaEE中的MVC(一)Dao层彻底封装
- 我的MVC框架————GothaMVC(4)GothamDispatcher的实现和Model层的封装
- model层
- model层
- iOS数据库离线缓存思路和网络层封装——数据缓存机制Model封装
- NodeJS入门(一)
- nodejs学习(一)
- NodeJs学习(一)
- Android内核开发:图解Android系统的启动过程
- Android通过注解实现UI的监听器绑定
- java并发编程之3——Java锁的分析
- 屏幕截图程序(WTL)
- HDU 4289 Control 最小割最大流 拆点
- nodejs MODEL层 封装(一)
- Android自动化实现点击自定义ListAdapter类控件
- leetcode Odd Even Linked List
- 【33】二叉树的镜像
- HDOJ3709_Balanced Number
- 活動的生命週期-11
- 简谈工厂模式
- 应当了解的OC知识 (1) 转载修改_OC
- Scala学习11之在eclipse下使用scalatest插件对scala文件进行测试