我收到此错误:
Unhandled rejection SequelizeUniqueConstraintError: Validation error
我该如何解决这个问题?
这是我的models / user.js
"use strict";
module.exports = function(sequelize, DataTypes) {
var User = sequelize.define("User", {
id: { type: DataTypes.INTEGER, autoIncrement: true, primaryKey: true},
name: DataTypes.STRING,
environment_hash: DataTypes.STRING
}, {
tableName: 'users',
underscored: false,
timestamps: false
}
);
return User;
};
这是我的routes.js:
app.post('/signup', function(request, response){
console.log(request.body.email);
console.log(request.body.password);
User
.find({ where: { name: request.body.email } })
.then(function(err, user) {
if (!user) {
console.log('No user has been found.');
User.create({ name: request.body.email }).then(function(user) {
// you can now access the newly created task via the variable task
console.log('success');
});
}
});
});
答案 0 :(得分:11)
对User.create()
的调用返回Promise.reject()
,但没有.catch(err)
来处理它。没有捕获错误并知道输入值,很难说验证错误是什么 - request.body.email
可能太长等等。
抓住Promise拒绝以查看错误/验证详细信息
User.create({ name: request.body.email })
.then(function(user) {
// you can now access the newly created task via the variable task
console.log('success');
})
.catch(function(err) {
// print the error details
console.log(err, request.body.email);
});
答案 1 :(得分:6)
如果您创建了唯一约束,请检入您的数据库,我的猜测是您为unique: true
添加了一些值并进行了更改,但是sequelize无法删除它来自您的数据库的约束。
答案 2 :(得分:3)
我的QA数据库存在此问题。有时新记录会保存到数据库中,有时会失败。在我的开发工作站上执行相同的过程时,它每次都会成功。
当我发现错误时(根据@doublesharp' s好建议)并将完整结果打印到控制台,它确认违反了一个唯一约束 - 特别是主键id列,它被设置为默认为自动增量值。
我用记录播种了我的数据库,即使这些记录的ID也设置为自动增量,200个记录的ID分散在1到2000之间,但数据库的自动增量序列是设置为从1开始。通常,序列中的下一个id未使用,但偶尔它已被占用,数据库将返回此错误。
我使用答案here重置序列,以便在我的最后一个种子记录之后开始,现在它每次都有效。
答案 3 :(得分:3)
在将SQLite用作数据库时,即使与唯一索引无关,Sequelize(当前为5.21.5)也会针对每个约束错误抛出SequelizeUniqueConstraintError
。一个例子就是将NULL
插入到不可为空的列中。因此,在调试此异常时,请确保还要检查其他类型的错误。
答案 4 :(得分:0)
在@Ricardo Machado的答案的基础上,如果将unique:true
添加到模型中,并且在现有表中已经具有在此新约束下不允许使用的值,则会出现此错误。要解决此问题,您可以手动删除行或删除表,以便Sequelize再次构建它。
答案 5 :(得分:0)
如果您在 Sequelize 中偶然发现此 Validation error
:检查填充(创建)表的查询是否执行一次。
我的 Nest.js 应用没有正确设置并执行了两次相同的命令,从而违反了唯一约束。