models 디렉터리에서 db를 export 해 줄 것이다.
sample code
const Sequelize = require("sequelize")
const env = process.env.NODE_ENV || "development"
const config = require("../config/config")[env]
const db = {}
// config.logging = false;
const sequelize = new Sequelize(
config.database,
config.username,
config.password,
config
)
db.sequelize = sequelize
db.Sequelize = Sequelize
// DB model import
db.User = require("./user")(sequelize, Sequelize)
db.Post = require("./post")(sequelize, Sequelize)
db.Hashtag = require("./hashtag")(sequelize, Sequelize)
console.log("db model imported", db.User, db.Post)
// 관계 연결 1:N
db.User.hasMany(db.Post)
db.Post.belongsTo(db.User)
console.log("관계 연결 1:N")
// 관계 연결 N:M
db.Post.belongsToMany(db.Hashtag, { through: "PostHashtag" })
db.Hashtag.belongsToMany(db.Post, { through: "PostHashtag" })
console.log("관계 연결 n:m")
db.User.belongsToMany(db.User, {
foreignKey: "followingId",
as: "Followers",
through: "Follow",
})
db.User.belongsToMany(db.User, {
foreignKey: "followerId",
as: "Followings",
through: "Follow",
})
console.log("팔로우 생성")
module.exports = db이렇게 models/index.js 에서 모델들을 가져와서 작업하고 관계 연결하고 등등을 하고 export 하는데
N:M 관계를 위해 생성된 Follow 모델을 어떻게 접근할 것인가?
module.exports 해주는 db 객체를 보면
db.sequelize.models 안에 모델들이 들어있다. Follow 모델 포함해서.
그래서 이렇게 작성하면 된다.
const {
User,
sequelize: {
models: { Follow },
},
} = require("../models")더 쉽고 좋은 방법이 있을 수도 있으니 다른 자료도 찾아보면 좋을 것 같다.