天天看點

Node.js與Sails~Model資料模型

回到目錄

對于Sails來說,它的Model與資料庫對應,不過它并沒有采用目前比較流行的poco貧血模型,而是采用了類似DDD的充血模型,即它的資料實體裡即有資料庫字段(屬性)而且還有方法,而模型裡的方法主要用來修飾它的屬性,如屬性的有效性,屬性的指派,插入前和更新前的動作等等,下面我們通過具體的執行個體代碼來說一下sails實體模型的用法。

一 定義一個Person實體

module.exports = {
    autoPK:true,//這是預設值,可以省略
    tableName: 'UserInfo',
    attributes: {
        name: {
            type: 'string',
            size: 255
        },
        sex: {
            type: 'integer',
            defaultsTo: 0
        },
        updateCount:{
            type:'integer',
            defaultsTo: 0
        }

    }
  
};      

二 對model相關參數的說明

通過上面的代碼我們知道了在sails中資料模型的類型,除了上面的string,integer,還有以下資料類型

  • float
  • text
  • date
  • datetime
  • boolean
  • binary
  • array
  • json

除了資料類型外,還有以下幾個知識點需要我們知道的

tableName:表示資料庫中資料表的名稱

defaultsTo:表示屬性的預設值

size:表示資料長度

email:可以添加對emial字段的限制,email:true

unique:表示這個字段在資料表中是唯一的标示,如使用者表,有些業務要求使用者名是唯一的,我們就可以利用unique這個特性,

primaryKey:可以讓我們把某個字段定義成資料表的主鍵,但在使用它時,要確定model的autoPK為false否則會有沖突(預設為true)

autoPK:是否自動生成主鍵字段id,true表示自動生成主鍵,false不生成,sails為各種資料庫訂制了主鍵生成規則,由mysql,sqlserver為自增主鍵,而mongodb為objectid主鍵

autoCreateAt:自動生成createAt字段,即添加時間

autoUpdateAt:自動生成updateAt字段,即當記錄有更新時,這個時間被自動更新

enum:表示某個字段可以以枚舉的形式儲存,它所存儲的值為這個枚舉的某個元素

columnName:為實體指定特殊的資料表列名,這類似于tableName

三 beforeUpdate和beforeCreate的作用

通過上面代碼我們可以在資料添加前和更新上做一些事情,這也是充血模型的優勢,它将與屬性本身有關的邏輯寫到了屬性内容,而不是寫在service方法裡,這有效的提高了對象的内聚性,也是面向對象的展現,下面的代碼在記錄更新時,對updateCount字段進行加1操作,代碼很簡單,但可以說明它的作用。

beforeCreate: function (values, next) {
        values.password =  md5(values.password,"zzl");//添加記錄時,為密碼進行加密政策,這由于屬于密碼本身的特性,是以寫在這裡比在業務代碼更合适/
        next();
    }
  beforeUpdate: function (values, next) {//values這個對象是從前台傳過來的對象
        values.updateCount+=1;
        next();
    }      

這裡要注意一點,你的values對象是前台傳給service層的對象,不是從資料表裡取出來的原始對象,這點要注意,有些想通過這個功能實作資料追蹤的,無法簡單實作!

 回到目錄

作者:倉儲大叔,張占嶺,

榮譽:微軟MVP

QQ:853066980

支付寶掃一掃,為大叔打賞!

Node.js與Sails~Model資料模型