egg.js(四) : 属性获取器和设置器

sequelize官方文档地址:设置器和获取器
在上一篇egg(三)中,我有提到获取器和设置器的用法,我觉得还是独立出来方便以后复习查找。

获取器

通过属性获取器对某个查询到的属性进行处理后返回

  • 场景:当我获取某条数据,我希望该数据的createdAt返回的是一个时间戳而不是格式。
    /app/model/user.js 目录文件下定义的模型
'use strict'
module.exports = app =>{
	const {STRING,INTEGER,DATE,ENUM} = app.Sequelize
	// 配置(重要:一定要配置详细,一定!!!)
	const User = app.model.define('user',{
		id:{
			type:INTEGER(20).UNSIGNED,
			primaryKey:true,
			autoIncrement:true,
		},
		username:{
			type:STRING(30),
			allowNull:false,
			defaultValue:'',
			comment:'用户名',
			unique:true		
		},
		password:{
			type:STRING(200),
			allowNull:false,
			defaultValue:'',
			// set修改器
			set(val){
				// 新增字段的setter,新增和更新时使用
				// this.setDataValue('password')   // 设置原始值
				this.setDataValue('password',val+'-crypto')
			}
		},
		avatar_url:{
			type:STRING(200),
			allowNull:true,
			defaultValue:''
		},
		sex:{
			type:ENUM,
            values:['男','女','保密'],
			allowNull:true,
			defaultValue:'男',
			comment:'用户性别',
		},
		// created_at:DATE,
		// 改写成
		created_at:{
			type:DATE,
			get(){
				// 通过get()获取器拿到该字段的值并转换成时间戳
				const val = this.getDataValue('created_at')
				return (new Date(val).getTime())
			}	
		}
		updated_at:DATE
	},{
		timestamps:true,	//是否自动写入时间戳
		// tableName:'user'	// 自定义数据表名称
        freezeTableName: true
	});
	// User.sync({ force: true });
	return User;
}

如上,注意看,在 created_at字段后,通过set对属性值进行处理,下面是数据对比:

  • 未使用 get()获取器时:
    在这里插入图片描述
    返回的时我们定义User model时的DATE类型

  • 使用获取器后的数据
    在这里插入图片描述

设置器

针对新增和更新数据时,统一对某一属性进行处理

  • 常用场景:通过一系列处理对用户的password进行加密处理
'use strict'
module.exports = app =>{
	const {STRING,INTEGER,DATE,ENUM} = app.Sequelize
	// 配置(重要:一定要配置详细,一定!!!)
	const User = app.model.define('user',{
		// ....
		password:{
			type:STRING(200),
			allowNull:false,
			defaultValue:'',
			// set修改器
			set(val){
				// 新增字段的setter,新增和更新时使用
				// this.setDataValue('password')   // 设置原始值
				this.setDataValue('password',val+'-crypto')
			}
		}
		// ...
	});
	// User.sync({ force: true });
	return User;
}

此时,当我们新增一条数据时:
在这里插入图片描述
数据库中的数据:
在这里插入图片描述
可以看到,数据库中的password字段值 是通过我们定义的user model中的password的set()设置器中的逻辑去处理之后保存的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值