Node.js 延续联想
我正在从事一个Typescript Sequelize项目,其中我的Node.js 延续联想,node.js,typescript,sequelize.js,Node.js,Typescript,Sequelize.js,我正在从事一个Typescript Sequelize项目,其中我的/models/index.ts文件具有以下“导入此目录中的所有模型”功能: var basename = path.basename(module.filename); fs .readdirSync(__dirname) .filter(function (file) { return (file.indexOf('.') !== 0) && (file !== basenam
/models/index.ts
文件具有以下“导入此目录中的所有模型”功能:
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) {
console.log(file);
var model = sequelize['import'](path.join(__dirname, file));
console.log('here');
// NOTE: you have to change from the original property notation to
// index notation or tsc will complain about undefined property.
db[model['name']] = model;
});
然后,我有如下结构的模型/models/user.ts
:
export default function defineUser(sequelize: Sequelize.Sequelize, DataTypes) {
var User = sequelize.define<UserInstance, UserAttributes>('User', {
email: {
type: Sequelize.STRING,
unique: true,
validate: { isEmail: true }
},
password: Sequelize.STRING
});
return User;
};
当我得到时,“~/models/job response”类型的参数不能分配给“Model”类型的参数。
然后:
~/node\u modules\sequelize\lib\associations\mixin.js:95
[1] 抛出新错误(this.name+'.+Utils.lowercaseFirst(Type.toString())+'调用的对象不是Sequelize.Model');
[1] ^
[1]
[1] 错误:Job.function(srcModel、targetModel、options){
[1] 联系(这个);
[1]
[1] }调用的对象不是Sequelize.Model的实例
[1] 在Model.hasOne(~\node\u modules\sequelize\lib\associations\mixin.js:95:13)
如何访问模型实例,以便将其传递给
hasMany()
或hasOne()
函数。模型注册循环运行后,所有模型都将在db.models
上可用,并按名称键入。因此,您可以在同一个文件或单独的文件中执行以下操作:
db.models.Job.hasOne(db.models.User)
我发现在一个单独的文件中定义关系很方便,因为如果您想定义关系的双方(即belongsTo/hasMany),那么无论如何都必须这样做(以避免循环依赖)
db.models.Job.hasOne(db.models.User)