model.hasMany 不是函数
model.hasMany is not a function
试图从 index.js 文件中的另一个 js 文件访问模型,但收到 call.hasMany 不是函数的错误。但是如果我把我所有的模型都放在索引文件中它工作 fine.But 当我试图从不同的 js 文件访问模型时它不起作用并且 returns 一个错误。
这是我的主索引文件
const {Sequelize} = require('sequelize');
const sequelize = new Sequelize('###############') // Example for postgres
const call = require("./models/call.model.js")
const session = require("./models/session.model.js")
const session_extra_data = require("./models/session_extra_data.model.js")
call.hasMany(session,{
as: "sessions"
})
session.belongsTo(call,{
foreignKey: "call_id",
as: "call"
})
session.hasMany(session_extra_data,{
as: "sessionExtraData"
})
session_extra_data.belongsTo(session,{
foreignKey: "session_id",
as: "session"
})
call.findAll({
limit: 5,
include: [{
model: session,
as: "sessions",
indlude:[{
model: session_extra_data,
as: "sessionExtraData",
}],
required: false,
nested: true,
all: true
}]
// include: [{
// all: true,
// nested: true
// }]
}).then(data => {
console.log("DATA", JSON.stringify(data));
})
这是我的通话模型
module.exports = (sequelize, DataTypes) => {
const call = sequelize.define('call', {
id: {
type: Sequelize.BIGINT,
allowNull: false,
primaryKey: true,
autoIncrement: true,
field: 'id'
},
version: {
allowNull: false,
type: Sequelize.BIGINT,
field: 'version'
},
startDate: {
allowNull: false,
type: Sequelize.DATE,
field: 'start_date'
}
},{
freezeTableName:true,
timestamps: false
});
}
您正在从不同的 js 文件中导出一个箭头函数,但您没有return在此函数中输入任何内容,因此从本质上讲,您无权访问在此箭头内创建的模型功能。您需要 return 函数中的模型:
module.exports = (sequelize, DataTypes) => {
const call = sequelize.define(
....
);
return call;
}
然后在您的索引文件中调用此函数以获取模型 returned:
const call = require("./models/call.model.js")();
call.hasMany(...);
但我不明白你为什么要从 js 文件导出箭头函数,你已将文件命名为 call.model.js 所以我假设你想导出模型本身。正确的做法是:
const Call = sequelize.define('call', {
id: {
type: Sequelize.BIGINT,
allowNull: false,
primaryKey: true,
autoIncrement: true,
field: 'id'
},
version: {
allowNull: false,
type: Sequelize.BIGINT,
field: 'version'
},
startDate: {
allowNull: false,
type: Sequelize.DATE,
field: 'start_date'
}
},{
freezeTableName:true,
timestamps: false
});
module.exports = Call;
现在您的索引文件应该可以正常工作了。
试图从 index.js 文件中的另一个 js 文件访问模型,但收到 call.hasMany 不是函数的错误。但是如果我把我所有的模型都放在索引文件中它工作 fine.But 当我试图从不同的 js 文件访问模型时它不起作用并且 returns 一个错误。
这是我的主索引文件
const {Sequelize} = require('sequelize');
const sequelize = new Sequelize('###############') // Example for postgres
const call = require("./models/call.model.js")
const session = require("./models/session.model.js")
const session_extra_data = require("./models/session_extra_data.model.js")
call.hasMany(session,{
as: "sessions"
})
session.belongsTo(call,{
foreignKey: "call_id",
as: "call"
})
session.hasMany(session_extra_data,{
as: "sessionExtraData"
})
session_extra_data.belongsTo(session,{
foreignKey: "session_id",
as: "session"
})
call.findAll({
limit: 5,
include: [{
model: session,
as: "sessions",
indlude:[{
model: session_extra_data,
as: "sessionExtraData",
}],
required: false,
nested: true,
all: true
}]
// include: [{
// all: true,
// nested: true
// }]
}).then(data => {
console.log("DATA", JSON.stringify(data));
})
这是我的通话模型
module.exports = (sequelize, DataTypes) => {
const call = sequelize.define('call', {
id: {
type: Sequelize.BIGINT,
allowNull: false,
primaryKey: true,
autoIncrement: true,
field: 'id'
},
version: {
allowNull: false,
type: Sequelize.BIGINT,
field: 'version'
},
startDate: {
allowNull: false,
type: Sequelize.DATE,
field: 'start_date'
}
},{
freezeTableName:true,
timestamps: false
});
}
您正在从不同的 js 文件中导出一个箭头函数,但您没有return在此函数中输入任何内容,因此从本质上讲,您无权访问在此箭头内创建的模型功能。您需要 return 函数中的模型:
module.exports = (sequelize, DataTypes) => {
const call = sequelize.define(
....
);
return call;
}
然后在您的索引文件中调用此函数以获取模型 returned:
const call = require("./models/call.model.js")();
call.hasMany(...);
但我不明白你为什么要从 js 文件导出箭头函数,你已将文件命名为 call.model.js 所以我假设你想导出模型本身。正确的做法是:
const Call = sequelize.define('call', {
id: {
type: Sequelize.BIGINT,
allowNull: false,
primaryKey: true,
autoIncrement: true,
field: 'id'
},
version: {
allowNull: false,
type: Sequelize.BIGINT,
field: 'version'
},
startDate: {
allowNull: false,
type: Sequelize.DATE,
field: 'start_date'
}
},{
freezeTableName:true,
timestamps: false
});
module.exports = Call;
现在您的索引文件应该可以正常工作了。