gpt4 book ai didi

javascript - 在模型上使用 beforeCreate 和 findOrCreate 导致 Sequelize 发生死锁

转载 作者:行者123 更新时间:2023-11-29 21:11:03 26 4
gpt4 key购买 nike

我收到错误:

Unhandled rejection SequelizeDatabaseError: ER_LOCK_DEADLOCK: Deadlock found when trying to get lock; try restarting transaction

这是我的模型:

var bcrypt = require('bcryptjs');

module.exports = function (sequelize, DataTypes) {
var User = sequelize.define('User', {
username: {type: DataTypes.STRING, unique: true},
password: DataTypes.STRING,
email: DataTypes.STRING,
isAdmin: DataTypes.BOOLEAN,
isActive: DataTypes.BOOLEAN
}, {
classMethods: {
associate: function (models) {
User.hasMany(models.Comment);
User.hasMany(models.Message, {as: 'receivedMessages', foreignKey: 'Receiver'});
User.hasMany(models.Message, {as: 'sentMessages', foreignKey: 'Sender'});
}
}
});

User.hook('beforeCreate', function (user, options, fn) {
bcrypt.genSalt(SALT_WORK_FACTOR, function (err, salt) {
if (err) {
return next(err);
}
bcrypt.hash(user.password, salt, function (err, hash) {
if (err) {
return next(err);
}
user.password = hash;
return fn(err, user);
});
});
});

User.findOrCreate({
where: {
username: 'admin'
},
defaults: {
username: 'admin',
email: 'admin@admin.com',
password: 'admin',
isAdmin: true,
isActive: true
}
});

return User;
};

如果我删除其中一个钩子(Hook)(beforeCreate 或 findOrCreate),它就可以正常工作。

这似乎是一个关于事务的问题,但我找不到让它工作的方法。

文档讨论了传递事务,但我不知道如何将事务传递给 findOrCreate。这是文档:http://docs.sequelizejs.com/en/latest/docs/hooks/#model-hooks

有什么想法吗?提前致谢!!

最佳答案

不是解决方案,而是解决方法,我没有使用 Hook “findOrCreate”,而是自己完成了它:

User.find(
{
where: {
username: 'admin'
}
}
).then(function (user) {
if (!user) {
User.create({
username: 'admin',
email: 'admin@admin.com',
password: 'admin',
isAdmin: true,
isActive: true
}).then(function (newUser) {
console.log('Admin created with id: ' + newUser.id);
});
}
}
);

也许不是最好的答案,但它有效。

关于javascript - 在模型上使用 beforeCreate 和 findOrCreate 导致 Sequelize 发生死锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36367229/

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