nodejs MODEL层 封装(一)
2016-05-13 20:28
471 查看
作者:短工邦技术部 - 陈文哲
node.js+express.js+mongooes+jade一圈走下来,感觉还是不够简便,概念也比较混乱,所以我着手按我的思路重新优化了这个框架。重点是优化MODEL层,从mongoose下手。
优化后的MODEL代码,举个栗子
然后,应用层(Controller)就可以这样子操作了
还能不能更简单?封装得更加无死角?
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}); }); };
还能不能更简单?封装得更加无死角?
相关文章推荐
- 使用 HTTP 上传 G 级的文件之 Node.js 版本
- mongo实现消息队列
- Node.js压缩web项目中的js,css和图片
- node连接mysql数据库
- async.js 学习记录
- 异步流程控制:7 行代码学会 co 模块
- 新时代编辑神器:Atom
- node.js中的fs.mkdir方法使用说明
- 为什么Node.js会这么火呢?Node.js流行的原因
- 究竟什么是Node.js?Node.js有什么好处?
- Linux下为Node.js程序配置MySQL或Oracle数据库的方法
- 三种Node.js写文件的方式
- node.js中的http.response.removeHeader方法使用说明
- 快速掌握Node.js模块封装及使用
- Node.js文件操作方法汇总
- Nodejs爬虫进阶教程之异步并发控制
- 简单谈谈node.js 版本控制 nvm和 n
- 浅析Node.js查找字符串功能
- Node.js中require的工作原理浅析
- 运行Node.js的IIS扩展iisnode安装配置笔记