回到目录

对于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. OD使用教程8

    方式一基本的打补丁方式:   打开程序之后首先会跳出一个nag窗口,从中我们知道了可以将nag窗口作为切入点,只要找到了nag的触发点就等同于找到注册与未注册的判断的点 右键-查找-所有参考文本字串 ...

  2. Json数据中的特殊字符处理

    今天在项目中遇到一个问题,页面上的数据突然显示不出来了,查验后得知是Json数据出现了问题.使用JSON从后台向前台传输数据的时候,当数据本身含有一些特殊字符,会导致JSON数据的解析出错.如果内容中 ...

  3. http statusCode(状态码) 200、300、400、500序列

    201-206都表示服务器成功处理了请求的状态代码,说明网页可以正常访问.        200(成功)  服务器已成功处理了请求.通常,这表示服务器提供了请求的网页.        201(已创建) ...

  4. python中zipfile文件名编码的问题

    在python中编程导入压缩包,利用zipfile包,从zipinfo读取文件名总是出错,创建的文件名是乱码,写入pgsql更是出错. 但在ubuntu下测试却正常,在windows下测试总是失败. ...

  5. [LeetCode] 452 Minimum Number of Arrows to Burst Balloons

    There are a number of spherical balloons spread in two-dimensional space. For each balloon, provided ...

  6. iOS开发零基础--Swift教程 字典

    字典的介绍 字典允许按照某个键来访问元素 字典是由两部分集合构成的,一个是键(key)集合,一个是值(value)集合 键集合是不能有重复元素的,而值集合是可以重复的,键和值是成对出现的 Swift中 ...

  7. php模拟登陆的两种实现方法分析

    php模拟登陆的实现方法分析 本文实例分析了php模拟登陆的实现方法.分享给大家供大家参考.具体分析如下: php模拟登陆的实现方法,这里分别列举两种方法实现模拟登陆人人网.具体实例代码如下: 1)使 ...

  8. 你好,欢迎来到我的博客,我是博主royalmice1

    你好,欢迎来到我的博客,我是博主royalmice

  9. Gbase配置

    喵了个咪的.到目前为止,自己已经用过SQL SERVER,My SQL,Oracle,SQLite,加上南大通用GBASE 五种数据库了.虽然每种都用的不深 注:GBASE提供了C的API,查看手册即 ...

  10. HTML5-布局的使用

    DIV布局: <!DOCTYPE html> <html> <head lang="en"> <meta charset="UT ...