当前位置: 首页 > news >正文

Sequelize:获取器, 设置器 虚拟字段

Sequelize 允许为模型属性定义自定义获取器(Getter) 和设置器(Setter),还支持创建虚拟字段(Virtual Field)。虚拟字段仅存在于模型层,不在数据库表中实际存储,可简化自定义属性逻辑,提升代码简洁性。

获取器(Getter)

定义与作用:为模型属性定义get()函数,读取属性值时自动调用,用于对原始数据进行加工后返回(不修改数据库存储值)。需通过this.getDataValue(‘属性名’)获取原始值,避免直接使用this.属性名导致无限循环。

const User = sequelize.define('user', {username: {type: DataTypes.STRING,get() {const rawValue = this.getDataValue('username');return rawValue ? rawValue.toUpperCase() : null; // 转为大写后返回}}
});

读取时返回加工后的值:user.username 输出 SUPERUSER123(原始值 SuperUser123 仍存于数据库)。可通过 user.getDataValue(‘username’) 查看未加工的原始值。

设置器(Setter)

定义与作用:为模型属性定义set(value)函数,设置属性值时自动调用,用于对输入值加工后存储(数据库仅存加工后的数据)。支持结合模型其他字段进行计算(如用用户名作为密码哈希的盐)。

const User = sequelize.define('user', {password: {type: DataTypes.STRING,set(value) {// 对密码进行哈希处理(示例,实际需用安全哈希算法)this.setDataValue('password', hash(value));}}
});
const User = sequelize.define('user', {username: DataTypes.STRING,password: {type: DataTypes.STRING,set(value) {// 用用户名+密码拼接后哈希this.setDataValue('password', hash(this.username + value));}}
});

● 文档明确:示例中的密码处理仅演示功能,实际需参考 OWASP 文档或咨询安全专家,确保密码存储安全。

虚拟字段(Virtual Field)

定义与作用:使用 DataTypes.VIRTUAL 定义,不在数据库表中创建列,仅在模型层通过自定义逻辑生成值。支持定义get()(计算返回值)和set()(通常用于禁止设置,抛出错误)。

const User = sequelize.define('user', {firstName: DataTypes.TEXT,lastName: DataTypes.TEXT,fullName: {type: DataTypes.VIRTUAL,get() {return `${this.firstName} ${this.lastName}`; // 拼接姓名},set(value) {throw new Error('不要尝试设置 `fullName` 的值!'); // 禁止设置}}
});

创建用户后,user.fullName 自动返回拼接后的全名(如 John Doe),数据库无 fullName 列。

http://www.dtcms.com/a/589465.html

相关文章:

  • DINOv3的学习
  • 建网站需要哪些费用温州微信网站开发
  • 数据结构精讲:从栈的定义到链式实现,再到LeetCode实战
  • MediaPipe入门指南:跨平台机器学习推理框架入门与实践
  • 西安高端网站开发郑州外贸网络推广
  • C 错误处理
  • seo专业培训费用自媒体seo优化
  • 做的网站百度没收录wordpress后台登陆界面
  • 基于430单片机多用途定时提醒器设计
  • 【C++】Reactor和Proactor
  • MCP概念及NetSuite应用与拓展
  • 深圳外贸网站建设公司帮别人做网站开价
  • 基于nginx的openlab的网站配置
  • web开发,在线%超市销售%管理系统,基于idea,html,jsp,java,ssh,sql server数据库。
  • Linux复习:系统调用与fork
  • 做网站需要哪些成本全屋定制网络平台
  • go-ethereum之rpc
  • 开源模型登顶?Kimi K2 Thinking 实测解析:它真能超越 GPT-5 吗?
  • 积分交易网站开发学院网站整改及建设情况报告
  • 影刀RPA实战:一键生成视频号销售日报,告别手工统计,效率提升10倍![特殊字符]
  • C语言算法:时间与空间复杂度分析
  • 最新选题-基于Hadopp和Spark的国漫推荐系统
  • Rust 练习册 :构建自然语言数学计算器
  • 中专旅游管理专业职业发展指南:从入门到精通的成长路径
  • 视频网站 建设绿化公司网站建设
  • 【Chrono】Cargo.toml 配置文件深度分析
  • 基于深度学习的车载视角路面病害检测系统【python源码+Pyqt5界面+数据集+训练代码】
  • 前端计算精度解决方案:big.js库
  • 珠海网站制作推广公司哪家好王野天个人简介
  • 微前端架构:JavaScript 隔离方案全解析(含 CSS 隔离)概要