我最近将 Sequelize ORM 从 v3 更新到 v4。我已遵循升级指南,但仍面临问题。我基于 express-example
。
这是 模型/index.ts :
export var db: DbConnection = {};
export var sequelize = new Sequelize(process.env.DB_CONNECTION_STRING);
var basename = path.basename(module.filename);
fs
.readdirSync(__dirname)
.filter(function (file) {
return (file.indexOf('.') !== 0) && (file !== basename) && (file.slice(-3) === '.js');
})
.forEach(function (file) {
var model = sequelize['import'](path.join(__dirname, file));
db[model['name']] = model;
});
Object.keys(db).forEach(function (modelName) {
if (db[modelName].associate) {
db[modelName].associate(db);
}
});
db['sequelize'] = sequelize; db['Sequelize'] = Sequelize;
export default <DbConnection>db;
这是 模型/user.ts :
export default function defineUser(sequelize: Sequelize.Sequelize, DataTypes) {
var User = sequelize.define<UserInstance, UserAttributes>('User', {
email: {
type: DataTypes.STRING,
unique: true,
validate: { isEmail: true }
},
password: DataTypes.STRING,
role: {
type: DataTypes.ENUM,
values: ['Admin', 'Operator', 'Member']
}
});
User.beforeCreate(function (user: UserInstance, options) {
return hashPassword(user.password).then(function (hashedPw) {
user.password = hashedPw;
});
})
return User;
};
function hashPassword(password: string): Promise<string> {
return new Promise(function (resolve, reject) {
bcrypt.genSalt(5, function (err, salt) {
if (err) { reject(err); }
bcrypt.hash(password, salt, null, function (err, hash) {
if (err) { reject(err); }
resolve(hash);
})
});
})
};
但是,我仍然收到错误:
Unhandled rejection Error: models.User appears to be a function. Perhaps you are importing model factory function? You should then use sequelize.import to create your model, see https://github.com/sequelize/express-example/blob/master/models/index.js#L17 at Loader.loadFixture (C:\Users\George\Source\Repos\myProj\node_modules\sequelize-testing-fixtures\lib\loader.js:39:15)
我究竟做错了什么?
更新:
我也试过
module.exports = function defineUser(...
,但这也不起作用。
最佳答案
您可能想要修复电子邮件和密码的数据类型。您也可能使用 module.export 而不是函数。
email: {
type: Sequelize.STRING, //change to DataTypes.STRING
unique: true,
validate: { isEmail: true }
},
password: Sequelize.STRING, //change to DataTypes.STRING
role: {
type: DataTypes.ENUM,
values: ['Admin', 'Operator', 'Member']
}
关于typescript - Sequelize 更新到 v4 抛出错误 : models. 用户似乎是一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45593425/