gpt4 book ai didi

node.js - SequelizeJS 允许重复 UNIQUE 字段

转载 作者:行者123 更新时间:2023-12-03 22:21:52 25 4
gpt4 key购买 nike

在我的网络应用程序(NodeJS + ExpressJS + SequelizeJS)中,我定义了模型用户:

let User = connection.define('user', {
username: {
type: Sequelize.STRING(40),
unique: true,
allowNull: false,
validate: {
notEmpty: true,
min: 4,
}
},
email: {
type: Sequelize.STRING,
unique: true,
allowNull: false,
notEmpty: true,
validate: {
isEmail: true
}
},
password: {
type: Sequelize.STRING,
allowNull: false,
notEmpty: true,
validate: {
min: 8,

}
},
name: {
type: Sequelize.STRING(50),
validate: {
min: 2
}
},
surname: {
type: Sequelize.STRING(50),
validate: {
min: 3
}
},
bio: Sequelize.TEXT(140),
lastLogin: Sequelize.DATE,
dateJoined: Sequelize.DATE,
active: {
type: Sequelize.BOOLEAN,
defaultValue: false
}
});

我希望用户名和电子邮件都是唯一的,以便没有人可以重复使用现有的电子邮件或现有的用户名。
所以我测试了它,我注意到构建的查询如下:
Executing (default): 
CREATE TABLE IF NOT EXISTS `user`(
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
`username` VARCHAR(40) NOT NULL UNIQUE,
`email` VARCHAR(255) NOT NULL UNIQUE,
`password` VARCHAR(255) NOT NULL,
`nome` VARCHAR(50),
`cognome` VARCHAR(50),
`bio` TEXT,
`lastLogin` DATETIME,
`dateJoined` DATETIME,
`active` TINYINT(1) DEFAULT0,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NOT NULL);

查询看起来不错。
然后我决定每次我的 Node 服务器启动时都进行相同的插入查询(使用相同的用户名和电子邮件),以测试是否保留了 NOT NULL 约束。
User.create({
username: 'MYUSERNAME',
email: 'MYEMAIL@GMAIL.COM',
password: 'MYPASSWORD'
})
.then(newUser => {
console.log('Insertion OK, username:', newUser.username);
})
.catch(error => {
console.log(error);
});

每次重启服务器时控制台输出:
Insertion OK, username: MYUSERNAME

如果我检查数据库记录,在用户表中我会看到相同字段中具有相同数据的多行。
-----------------------------------------------
| Username | Email | Password |
-----------------------------------------------
| MYUSERNAME | MYEMAIL@GMAIL.COM | MYPASSWORD |
-----------------------------------------------
| MYUSERNAME | MYEMAIL@GMAIL.COM | MYPASSWORD |
-----------------------------------------------
| MYUSERNAME | MYEMAIL@GMAIL.COM | MYPASSWORD |
-----------------------------------------------

为什么不保留 UNIQUE 约束?

我正在为数据库使用 sqlite3 文件。

最佳答案

这是我解决同样问题的方法, 将用户模型 的电子邮件对象 更改为

email: {
type: Sequelize.STRING,
allowNull: false,
notEmpty: true,
validate: {
isEmail: true
},
unique: 'email'
}

或者 如果您想要自定义验证错误消息
email: {
type: Sequelize.STRING,
allowNull: false,
notEmpty: true,
validate: {
isEmail: true
},
unique: {
args: 'email',
msg: 'The email is already taken!'
}
}

记住 如果你有迁移文件,你应该在 email 对象中指定 unique: true

关于node.js - SequelizeJS 允许重复 UNIQUE 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53452134/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com