使用sequelizeinit
,我生成了一个带有迁移的模型。
在model.js内部,只有每个属性类型的定义,例如。
const User = sequelize.define('User', {
firstName: DataTypes.STRING,
lastName: DataTypes.STRING,
email: DataTypes.STRING,
password: DataTypes.STRING
}, {});
在迁移文件中,还有其他选项,例如。
...
up: (queryInterface, Sequelize) => {
return queryInterface.createTable('Users', {
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: Sequelize.INTEGER
},
firstName: {
type: Sequelize.STRING
},
lastName: {
type: Sequelize.STRING
},
email: {
type: Sequelize.STRING,
},
password: {
type: Sequelize.STRING
},
createdAt: {
allowNull: false,
type: Sequelize.DATE
},
updatedAt: {
allowNull: false,
type: Sequelize.DATE
}
});
},
...
例如,如果我想使电子邮件唯一,我会将电子邮件属性更改为:
email: {
type: Sequelize.STRING,
unique: true
},
我的问题是,在model.js文件中也包含这些额外的属性选项是好还是坏,或者只保留属性的定义(types
)来保持简单。
是的,您可以这样做,也可以像这样定义值的验证。
因此,您不必每次都在api调用中查找email_id
是否已经退出。
email: {
type: Sequelize.STRING(18),
validate: {
isUnique(value, next) {
user.find({
where: { email: value },
attributes: ['id']
}).done((user) => {
if (user)
return next('errors.email.unique');
next();
});
}
}