MySQL
node.js와 MySQL 연동하기
npm i sequelize sequelize-cli
npm i mysql2
- sequelize: js로 sql대신 테이블을 만들 수 있게 도와주는 라이브러리
- mysql2: node에서 mysql을 사용하기 위한 드라이버
$ npx sequelize init
- sequelize를 실행시키면 프로젝트에
config
, migrations
, models
, seeders
라는 폴더가 생긴다.
config/config.json
{
"development": {
"username": "root",
"password": MySQL에 등록한 비밀번호,
"database": 데이터베이스 이름,
"host": "127.0.0.1",
"port": "3306"
"dialect": "mysql"
},
"test": {
"username": "root",
"password": null,
"database": "database_test",
"host": "127.0.0.1",
"dialect": "mysql"
},
"production": {
"username": "root",
"password": null,
"database": "database_production",
"host": "127.0.0.1",
"dialect": "mysql"
}
}
app.js
const express = require('express');
const app = express();
const postRouter = require('./routes/post');
const db = require('./models');
db.sequelize.sync()
.then(() => console.log('db 연결 성공'))
.catch(console.error);
app.listen(3065, () => {
console.log('Server running on port 3065');
})
// 아래코드로 db생성
$ npx sequelize db:create
models/index.js
- sequelize에서는 table을 model로 부른다.
const Sequelize = require('sequelize');
const comment = require('./comment');
const hashtag = require('./hashtag');
const image = require('./image');
const post = require('./post');
const user = require('./user');
const env = process.env.NODE_ENV || 'development';
const config = require('../config/config')[env];
const db = {};
const sequelize = new Sequelize(config.database, config.username, config.password, config);
db.Comment = comment;
db.Hashtag = hashtag;
db.Image = image;
db.Post = post;
db.User = user;
Object.keys(db).forEach(modelName => {
db[modelName].init(sequelize);
})
Object.keys(db).forEach(modelName => {
if (db[modelName].associate) {
db[modelName].associate(db);
}
});
db.sequelize = sequelize;
db.Sequelize = Sequelize;
module.exports = db;
model 기본 형태
const DataTypes = require('sequelize');
const { Model } = DataTypes;
module.exports = class User extends Model {
static init(sequelize) {
return super.init({
column: {
type: DataTypes.STRING(30),
allowNull: false,
unique: true,
},
column2: {},
column3: {},
{
modelName: '모델명',
tableName: '테이블명',
charset: 'utf8',
collate: 'utf8_general_ci',
sequelize,
});
}
static associate(db) {
db.User.hasMany(db.Post);
db.User.hasMany(db.Comment);
db.User.belongsToMany(db.Post, { through: 'Like', as: 'Liked' })
db.User.belongsToMany(db.User, { through: 'Follow', as: 'Followers', foreignKey: 'FollowingId' });
db.User.belongsToMany(db.User, { through: 'Follow', as: 'Followings', foreignKey: 'FollowerId' });
}
}
nodemon
- 서버에서 작업을 수정하고 db에 반영하려면 서버를 껏다가 다시 켜주어야 하는 번거로움이 있다.
nodemon
은 코드를 변경하게되면 알아서 서버를 재실행 해준다.
$ npm i -D nodemon
// node 대신에 nodemon 타이핑
$ nodemon app