作者:短工邦技术部 - 陈文哲
封装了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); }); });}
现在写业务是不是简单多了?但还能不能继续扩展?赶紧扩展下去可以变成一个框架了的样子……