您需要在 DB 级别添加唯一约束,并在创建过程中处理 SequelizeUniqueConstraintError 以向用户返回验证消息。
如果您使用sequelize.sync() 对数据库架构应用模型更改,那么您可以像这样定义约束:
module.exports = (sequelize, DataTypes) => {
const Users = sequelize.define('Users', {
fullName: {
type: DataTypes.STRING,
allowNull: false,
unique: true // unique constrain of the column `fullName`
},
emailAddress: {
type: DataTypes.STRING,
allowNull: false,
unique: true // unique constrain of the column `emailAddress`
},
password: {
type: DataTypes.STRING,
allowNull: false,
},
}, {
// define constrain like this if you need combination of columns unique
// indexes: [
// {
// unique: true,
// fields: ['fullName', 'emailAddress']
// }
// ]
});
return Users;
};
如果您使用迁移创建数据库架构,您可以像这样创建约束:
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.addColumn('Users', 'fullName', {
type: DataTypes.STRING,
allowNull: false,
unique: true // unique constrain of the column `fullName`
});
await queryInterface.addColumn('Users', 'emailAddress', {
type: DataTypes.STRING,
allowNull: false,
unique: true // unique constrain of the column `emailAddress `
});
// define constrain like this if you need combination of columns unique
// return queryInterface.addConstraint('Users', ['fullName', 'emailAddress'], {
// 'type': 'unique',
// 'name': 'UK_Users_fullName_emailAddress'
// })
},
down: async (queryInterface, Sequelize) => {
await queryInterface.removeColumn('Users', 'emailAddress');
await queryInterface.removeColumn('Users', 'fullName');
// return queryInterface.removeConstraint('Users', 'UK_Users_fullName_emailAddress')
}
}
所以在这种方法中,数据库永远不会让您添加重复的条目。
更新 #1
如果我没看错,你的代码 sn-p 就是一个快速路由器。如果是这样,那么您需要检查是否存在具有电子邮件或全名的用户,例如使用 sequelize:
router.post("/", async (req, res) => {
const { fullName, emailAddress, password } = req.body;
const user = await Users.findOne({ fullName, emailAddress });
if (!user) {
res.status(400).send({ error: "This email is in use by someone els, please try something else, thanks." });
} else {
bcrypt.hash(password, 10).then((hash) => {
Users.create({
fullName: fullName,
emailAddress: emailAddress,
password: hash,
});
res.json("User, Success");
});
}
});