1. 程式人生 > >nodejs MODEL層 封裝(二)

nodejs MODEL層 封裝(二)

作者:短工邦技術部 - 陳文哲

經過《nodejs MODEL層 封裝(一)》的封裝,MODEL層變得簡潔了,但是所有MODEL層的方法都一樣,所以顯而易見的,下一步封裝就是把所有相同的程式碼封裝到BaseMODEL,然後自定義的MODEL“繼承”自BaseMODEL就行了。

在MODEL目錄下,新建BaseMODEL.js,程式碼如下

exports.statics = {
    //KeyValue是一個JSON物件,可以根據需求自由傳入
    findByKeyValue : function( KeyValue, data ) {
        return this.find(KeyValue).exec( data );
    },
    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();  //所有更新操作,都更新系統updatedAt欄位
        return this.update({_id:query._id},query.data).exec(data);
    }
};

然後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"});

var BaseMODEL = require("./BaseMODEL");
MODEL.statics = BaseMODEL.statics;

/* global db */
module.exports = db.model('PlanMODEL', MODEL);