node.js - 无法让 Sequelize belongsToMany 关联工作 (EagerLoadingError)
问题描述
我是 Sequelize 的新手,并试图在 Cubicles 和用户之间建立多对多的关系。我有一个预订表来加入这两个表。
目前我正在使用 sequelize.define 方法来创建模型。我不确定在哪里创建关联,我在模型文件中制作它们时出错(错误是说其他模型不存在)。我把它们放在 backend/server.js 文件中。
问题是当我尝试在预订中包含用户的信息时,它会产生一个错误,指出用户没有与预订相关联。
这是代码...
routes/reservations.js 的问题部分
// Get list of reservations by a specific user
router.get('/:userId', async (req, res) => {
const reservations = await Reservation.findAll({
where: { userId: req.params.userId },
include: User,
}).catch((err) => console.log(err))
res.send(reservations)
})
而错误...
EagerLoadingError [SequelizeEagerLoadingError]:用户未与预订相关联!在 Function._getIncludedAssociation (C:\Users\charl\Desktop\commerce-express\node_modules\sequelize\lib\model.js:709:13) 在 Function._validateIncludedElement (C:\Users\charl\Desktop\commerce-express\ node_modules\sequelize\lib\model.js:613:53) 在 C:\Users\charl\Desktop\commerce-express\node_modules\sequelize\lib\model.js:509:37 在 Array.map () 在 Function. _validateIncludedElements (C:\Users\charl\Desktop\commerce-express\node_modules\sequelize\lib\model.js:504:39) 在 Function.findAll (C:\Users\charl\Desktop\commerce-express\node_modules\sequelize \lib\model.js:1722:12)
在 processTicksAndRejections (internal/process/task_queues.js:95:5) 在异步 Function.findAll (C:\Users\charl\Desktop\commerce-express\node_modules\sequelize\lib\model.js:1916:12) 在异步file:///C:/Users/charl/Desktop/commerce-express/routes/reservations.js:19:24
模型和配置文件:
模型/Cubicle.js
import Sequelize from 'sequelize'
const { DataTypes } = Sequelize
import sequelize from '../config/database.js'
const Cubicle = sequelize.define(
'Cubicle',
{
name: {
type: DataTypes.STRING,
},
floor: {
type: DataTypes.STRING,
},
building: {
type: DataTypes.STRING,
},
},
{
timestamps: false,
}
)
export default Cubicle
模型/User.js
import Sequelize from 'sequelize'
const { DataTypes } = Sequelize
import sequelize from '../config/database.js'
const User = sequelize.define(
'User',
{
email: {
type: DataTypes.STRING,
},
password: {
type: DataTypes.STRING,
},
},
{
timestamps: false,
}
)
export default User
模型/Reservation.js
import Sequelize from 'sequelize'
const { DataTypes } = Sequelize
import sequelize from '../config/database.js'
const Reservation = sequelize.define(
'Reservation',
{
startDate: {
type: DataTypes.DATEONLY,
},
endDate: {
type: DataTypes.DATEONLY,
},
},
{
timestamps: false,
}
)
export default Reservation
配置/数据库.js
import Sequelize from 'sequelize'
const sequelize = new Sequelize('db_name', 'user', 'pwd', {
host: 'localhost',
dialect: 'mysql',
pool: {
max: 5,
min: 0,
aquire: 30000,
idle: 10000,
},
})
export default sequelize
后端/server.js
import express from 'express'
import dotenv from 'dotenv'
import sequelize from '../config/database.js'
import users from '../routes/users.js'
import cubicles from '../routes/cubicles.js'
import reservations from '../routes/reservations.js'
import User from '../models/User.js'
import Cubicle from '../models/Cubicle.js'
import Reservation from '../models/Reservation.js'
// Test sequelize
sequelize
.authenticate()
.then(() => console.log('Database connected...'))
.catch((err) => console.log('Error: ' + error))
// Associations
User.belongsToMany(Cubicle, {
through: Reservation,
})
Cubicle.belongsToMany(User, {
through: Reservation,
})
// User.sync({ force: true })
// Cubicle.sync({ force: true })
// Reservation.sync({ force: true })
dotenv.config()
const app = express()
app.use(express.json())
// Routes
app.use('/users', users)
app.use('/cubicles', cubicles)
app.use('/reservations', reservations)
const PORT = process.env.PORT || 5000
app.listen(
PORT,
console.log(
`Server is running in ${process.env.NODE_ENV} mode on port ${PORT}`
)
)
解决方案
推荐阅读
- python - np.isin() 忽略数组的一些条目
- gridview - 在现代工具包 extjs 中,单击即可编辑网格单元
- python - sqlalchemy 标量子查询转换
- database - 最高范式
- amazon-web-services - 通过外部编辑器 (AWS CLI) 访问 AWS,虽然授权但授权错误
- sql - Hive - 以分钟计算字符串类型时间戳差异
- c# - 处理 IIS 托管的 Web 服务启动失败
- text - Thymeleaf 文本输出 [
- html - Jquery .text 有时不适用于烧瓶?
- flowtype - 如何在流中的父组件和子组件之间同步泛型类型?