足以验证重复的用户名吗?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了足以验证重复的用户名吗?相关的知识,希望对你有一定的参考价值。
所以我有这个组织的续集模型:
module.exports = (sequelize, Sequelize) =>
const Organization = sequelize.define("organization",
id:
type: Sequelize.INTEGER,
autoIncrement: true,
primaryKey: true,
allowNull: false
,
organizationName:
type: Sequelize.STRING,
allowNull: false,
notEmpty: true,
unique:
args: 'username',
msg: 'This username is already taken!'
,
emailAddress:
type: Sequelize.STRING,
allowNull: false,
validate:
isEmail: true
,
unique:
args: 'email',
msg: 'The email is already taken!'
,
physicalAddress:
type: Sequelize.STRING,
allowNull: true
,
city:
type: Sequelize.STRING,
allowNull: false
,
country:
type: Sequelize.STRING,
allowNull: false
,
phone:
type: Sequelize.INTEGER,
allowNull: true
,
websiteAddress:
type: Sequelize.STRING,
allowNull: true
,
timestamps: false,
underscored: true,
freezeTableName: true
);
return Organization;
;
当用户向新组织注册时,我要确保输入的用户名是唯一的。
我的问题是...我的实施够吗?还是我应该在插入之前做一个organization.find
?
它确实有效,但我很担心。
我知道,使用上述方法,即使验证失败,ID也会自动递增。但是还有其他问题吗?
答案
如果名称不是唯一的,您将依靠数据库排除错误。这实际上应该是万不得已的做法,建议您在尝试插入之前查询表。但是,您可以查看upsert样式的操作,例如findOrCreate
附加思想:如果保留现有用户名的缓存列表并搜索before,然后尝试进行插入-作为验证过程的一部分,则对数据库的压力将减少,可伸缩性更好,并为用户带来更好的体验。理想情况下,当用户输入组织名称时,将从ajax查询中调用它。
关于一些吸引人的想法的更新:Redis是一个很好的开始。它已在所有主要提供商(如AWS,Heroku,Azure等)中广泛采用和实施。设置简单,在本地轻松设置。具有集中的共享缓存,使您可以在Web / api实例之间共享数据,查询速度将大大提高,并且在缓存的数据足够时,可以减轻数据库的负担。我喜欢ioredis驱动程序。
以上是关于足以验证重复的用户名吗?的主要内容,如果未能解决你的问题,请参考以下文章