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数据模型,如需转载请自行联系原博主。

目录
相关文章
|
7天前
|
数据采集 存储 JavaScript
如何使用Puppeteer和Node.js爬取大学招生数据:入门指南
本文介绍了如何使用Puppeteer和Node.js爬取大学招生数据,并通过代理IP提升爬取的稳定性和效率。Puppeteer作为一个强大的Node.js库,能够模拟真实浏览器访问,支持JavaScript渲染,适合复杂的爬取任务。文章详细讲解了安装Puppeteer、配置代理IP、实现爬虫代码的步骤,并提供了代码示例。此外,还给出了注意事项和优化建议,帮助读者高效地抓取和分析招生数据。
如何使用Puppeteer和Node.js爬取大学招生数据:入门指南
|
26天前
|
前端开发 JavaScript
JS-数据筛选
JS-数据筛选
31 7
|
26天前
|
JavaScript 数据安全/隐私保护
2024了,你会使用原生js批量获取表单数据吗
2024了,你会使用原生js批量获取表单数据吗
44 4
|
25天前
|
Web App开发 JavaScript 前端开发
深入理解Node.js事件循环和异步编程模型
【10月更文挑战第9天】在JavaScript和Node.js中,事件循环和异步编程是实现高性能并发处理的基石。本文通过浅显易懂的语言和实际代码示例,带你一探究竟,了解事件循环的工作原理及其对Node.js异步编程的影响。从基础概念到实际应用,我们将一步步解锁Node.js背后的魔法,让你的后端开发技能更上一层楼!
|
2月前
|
JavaScript 前端开发 数据库
探索Node.js中的异步编程模型
【9月更文挑战第23天】在Node.js的世界里,异步编程是核心的魔法,它让这个平台能够处理高并发请求。本文将带你深入理解Node.js的异步编程模型,通过代码示例和直观的解释,我们将一起揭开异步编程的面纱。
41 16
|
1月前
|
Web App开发 JavaScript 前端开发
JavaScript Window - 浏览器对象模型
JavaScript Window - 浏览器对象模型
21 2
|
2月前
|
JavaScript 前端开发 安全
js逆向实战之烯牛数据请求参数加密和返回数据解密
【9月更文挑战第20天】在JavaScript逆向工程中,处理烯牛数据的请求参数加密和返回数据解密颇具挑战。本文详细分析了这一过程,包括网络请求监测、代码分析、加密算法推测及解密逻辑研究,并提供了实战步骤,如确定加密入口点、逆向分析算法及模拟加密解密过程。此外,还强调了法律合规性和安全性的重要性,帮助读者合法且安全地进行逆向工程。
84 11
|
2月前
|
Web App开发 JavaScript 前端开发
探索Node.js中的异步编程模型
【9月更文挑战第21天】在现代Web开发中,Node.js以其非阻塞I/O和事件驱动的特性成为热门选择。本文将深入探讨Node.js的异步编程模型,揭示其背后的原理,并通过示例代码展示如何高效利用异步特性来处理并发任务。
|
1月前
|
机器学习/深度学习 JSON JavaScript
LangChain-21 Text Splitters 内容切分器 支持多种格式 HTML JSON md Code(JS/Py/TS/etc) 进行切分并输出 方便将数据进行结构化后检索
LangChain-21 Text Splitters 内容切分器 支持多种格式 HTML JSON md Code(JS/Py/TS/etc) 进行切分并输出 方便将数据进行结构化后检索
22 0
|
1月前
|
数据采集 JavaScript 前端开发
JavaScript中通过array.filter()实现数组的数据筛选、数据清洗和链式调用,JS中数组过滤器的使用详解(附实际应用代码)
JavaScript中通过array.filter()实现数组的数据筛选、数据清洗和链式调用,JS中数组过滤器的使用详解(附实际应用代码)