STUDY/JavaScript || NodeJS

Sequelize를 사용해 Express와 MySQL을 연결 | Sequelize | 관계 정의

nicesugi 2023. 6. 29. 23:58

Sequelize를 사용해 Express와 MySQL을 연결

NodeJS와 Mongoose를 이용해 1인 미니프로젝트를 진행한 경험이 있다.

NodeJS에 대한 기본기도 다지고, SQL을 다뤄보고 싶어서 'Node.js 교과서 개정 3판' 을 참고하였다.

포스팅 내용으로는 7장에 나오는 내용을 직접 따라해보며 작성한 내용이다... 저자의 코드가 담긴거라 몇개만 !

https://github.com/nicesugi/study-nodeJS/tree/main/learn-sequelize

 

GitHub - nicesugi/study-nodeJS

Contribute to nicesugi/study-nodeJS development by creating an account on GitHub.

github.com


sequelize 패키지 사용해서 서버와 데이터베이스 연결해보기

npm i express sequelize sequelize-cli mysql2
npx sequelize init # 전역 설치 없이 명령어로 사용하기위해 npx!

-> config, migrations, models, seeders 폴더가 생성되면 GOOD !

 

자동으로 만들어진 models. index 기본 시퀄라이즈 파일은 아래와는 다를테지만, 이정도가 미니멈이라고 보면 된다.

'use strict';

const Sequelize = require('sequelize');
const env = process.env.NODE_ENV || 'development';
const config = require(__dirname + '/../config/config.json')[env];
const db = {};

const sequelize = new Sequelize(config.database, config.username, config.password, config);

db.sequelize = sequelize;

module.exports = db;

 

이 후에 app.js 혹은 index.js 을 만들어주고 아래의 코드를 참고해 라우터들을 연결해주면 된다 !

'use strict';

const express = require('express');
const { sequelize } = require('./models');

const app = express();
app.set('port', process.env.PORT || 3001);

sequelize.sync({ force: false})
.then(() => {
    console.log('데이터베이스 연결 성공');
})
.catch((err) => {
    console.log(err);
});


app.listen(app.get('port'), () => {
    console.log(app.get('port'), '번 포트에서 대기 중 ! 🔥');
});

 

 


관계 정의하기

- 1 : N

// user 모델
static associate(db) {
        db.User.hasMany(db.Comment, { foreignKey: 'commenter', sourceKey: 'id' });
    }

// comment 모델
static associate(db) {
        db.Comment.belongsTo(db.User, { foreignKey: 'commenter', targetKey: 'id' });
    }

- 1 : 1

// user 모델
static associate(db) {
        db.User.hasOne(db.Info, { foreignKey: 'userId', sourceKey: 'id' });
    }

// info 모델이 있다고 할경우 
static associate(db) {
        db.Info.belongsTo(db.User, { foreignKey: 'userId', targetKey: 'id' });
    }

- N : M

다대다 관계관계 특성상 새로운 모델이 생성이 되는데 through 속성에 모델의 이름을 적으면 됨.

해당 PostHashtag 모델에는 게시글, 해시태그의 아이디가 저장됨

접근시에는 db.sequelize.models.PostHashtag 같이 사용가능

게시글 하나에 태그가 여러개 & 태그 하나에 게시글이 여러개 이런식일 경우

// post 모델이 있다고 할경우 
static associate(db) {
        db.Post.belongsToMany(db.Hashtag, { through: 'PostHashtag' });
    }

// hashtag 모델이 있다고 할경우 
static associate(db) {
        db.Hashtag.belongsToMany(db.Post, { through: 'PostHashtag' });
    }
반응형