nodejs MODEL层 封装(一)
2016-05-25 22:01
591 查看
作者:短工邦技术部 - 陈文哲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}); }); };还能不能更简单?封装得更加无死角?
相关文章推荐
- 222. Count Complete Tree Nodes
- Yslow on Nodejs server
- DOMNodeInserted监听div内容改变
- node+fis3搭建
- hadoop2.5集群迁移namenode
- nodejs 返回html页面--使用 ejs 模板
- nodejs
- leetcode 19. Remove Nth Node From End of List
- leetcode 25. Reverse Nodes in k-Group——很值得一看的链表题
- Nodejs学习笔记(二)
- Nodejs学习笔记(一)
- node.js读取本地的文件
- nodejs的调试(node-inspector)
- node.js windows 64位安装
- 10个常见的Node.js面试题
- 10个常见的Node.js面试题
- requirejs in node
- "same tree" and "Delete Node in a Linked List"
- Promise.all解决异步条件的收敛
- 删除node_modules文件下依赖层次过多的解决方法