Sequelize를 사용해 Express와 MySQL을 연결
NodeJS와 Mongoose를 이용해 1인 미니프로젝트를 진행한 경험이 있다.
NodeJS에 대한 기본기도 다지고, SQL을 다뤄보고 싶어서 'Node.js 교과서 개정 3판' 을 참고하였다.
포스팅 내용으로는 7장에 나오는 내용을 직접 따라해보며 작성한 내용이다... 저자의 코드가 담긴거라 몇개만 !
https://github.com/nicesugi/study-nodeJS/tree/main/learn-sequelize
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' });
}
반응형
'STUDY > JavaScript || NodeJS' 카테고리의 다른 글
navigator.mediaDevices.getUserMedia() | 오디오/비디오 제어 (0) | 2023.08.04 |
---|---|
바닐라 자바스크립트로 심플한 앱 만들기 | 깃헙.io (0) | 2023.07.24 |
이벤트 핸들러 호출 방식 | 함수 사용, 객체 사용 (0) | 2023.07.14 |
Express, MySQL 로 SNS 만들기 (0) | 2023.06.29 |