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層的對象,不是從數據表里取出來的原始對象,這點要注意,有些想通過這個功能實現數據追蹤的,無法簡單實現!
?回到目錄
總結
以上是生活随笔為你收集整理的Node.js与Sails~Model数据模型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python----面向对象:1类的定义
- 下一篇: cocos2d-x 调色