回到目录

对于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:表示某个字段可以以枚举的形式保存,它所存储的值为这个枚举的某个元素

aaarticlea/png;base64,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" alt="" />

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数据模型的更多相关文章

  1. Node.js与Sails~Model和ORM的持久化

    回到目录 上一讲说了在sails里定义model及相关参数的说明,这一讲主要说一下如何将你的Model持久化到文件,关系数据库和Nosql数据库里,在持久化这点上,sails是统一管理的,它可以在/c ...

  2. Node.js与Sails~项目结构与Mvc实现

    回到目录 Sails是一个Node.js的中间件架构,帮助我们很方便的构建WEB应用程序,网址:http://www.sailsjs.org/,它主要是在Express框架的基础上发展起来的,扩展了新 ...

  3. Node.js与Sails~自定义响应体responses

    回到目录 在Node.js里,你可以控制请求和响应,自己可以定义自己的响应方式,如对文本如何响应,对json如何响应,对图像流如何响应等等,而这些在Sails架构里,变得更加容易和清晰了,它位于项目的 ...

  4. Node.js之sails框架

    先开一坑,有空更新,记录最近钉钉项目上对node及sails框架的学习记录和理解

  5. Node.js与Sails~日志机制log

    回到目录 看到Sails的日志就会想起来log4net,确实它们在很多地方是相似的,都是采用分级别记录的方式,而sails我觉得在使用上更加方便,它不需要我们做多于的事情,直接sails.log.级别 ...

  6. Node.js与Sails~方法拦截器policies

    回到目录 policies sails的方法拦截器类似于.net mvc里的Filter,即它可以作用在controller的action上,在服务器响应指定action之前,对这个action进行拦 ...

  7. Node.js与Sails~中间查询语言Waterline

    回到目录 上讲主要说了如何配置sails的持久化机制,这讲主要说一下实现持久化时的增删改查的语法,在sails里使用了和mongodb风格类似的waterline查询语言,使用简单,语法生动,下面我们 ...

  8. [Node.js] Create a model to persist data in a Node.js LoopBack API

    In this lesson you will learn what a LoopBack model is, you will create a Product model using the Lo ...

  9. Node.js与Sails~redis组件的使用

    有段时间没写关于NodeJs的文章了,今天也是为了解决高并发的问题,而想起了这个东西,IIS的站点在并发量达到200时有了一个瓶颈,于是想到了这个对高并发支持比较好的框架,nodeJs在我之前写出一些 ...

随机推荐

  1. js弹出公告

    调用: $(document).ready(function(){ sAlert("公告","内容"); }); 方法 function sAlert(strT ...

  2. JS-Dom概念

    <!DOCTYPE HTML><html><head><meta http-equiv="Content-Type" content=&q ...

  3. 利用JDBC连接MySQL并使用MySQL

    driver为JDBC的驱动. url为数据库的地址. usrname和password分别为数据库的用户名和密码. Connection类用来连接MySQL. PreparedStatement类用 ...

  4. oracle官方文档12c对应关系

    ADDCI Oracle® Database Data Cartridge Developer's Guide 12c Release 1 (12.1) E15882-05 ADFNS Oracle® ...

  5. html form 提交表单的一些问题

    1. 如果在一个form里有summit按钮,则只能提交本form的内容

  6. Chrome: Resource interpreted as Font but transferred with MIME type font/x-woff

    最近,项目中加入了Bootstrap进行界面优化,但是,项目加载运行之后,控制台总是提示以下错误信息: GET http://localhost:8080/.../fonts/fontawesome- ...

  7. Usart的单线半双工模式(stm32F10x系列)

    这两天折腾CTS/RTS硬件流控,看到说232协议的CTS/RTS只是用来做半双工换向使用的.正好手头上有块stm32的板子,看了看stm32的Usart,竟然发现支持的是单线半双工.232里面毕竟4 ...

  8. Latent semantic analysis note(LSA)

    1 LSA Introduction LSA(latent semantic analysis)潜在语义分析,也被称为LSI(latent semantic index),是Scott Deerwes ...

  9. Manhattan distance(for lab)

    Input four integer x1, y1, x2, y2, which is mean that the coordinates of two points A(x1, y1), B(x2, ...

  10. SQL入门经典(三) 之连接查询

    上一篇介绍到查询.这一篇主要讲连接查询,将介绍INNER JOIN,OUTER JOIN(LEFT和RIGHT),FULL JOIN,CROSS JOIN. 连接顾名斯义就是把多个数据表数据合并到一个 ...