express 프로젝트생성
npm install -g express-generator
express [프로젝트이름]
나는 sequelize 라고 만들겠다. 프로젝트에 들어가보면
npm install
npm start
하면 실행 할 수 있다.
이제 sequlize 를 통해서 DB 와 연결하는 작업을 하겠다.
npm i sequelize mysql2
npm i -g sequelize-cli
sequelize init
이렇게 config,models,migration,seeders 폴더이 생성 되었을 것이다.
migration,seeders 폴더는 삭제해도 된다.
config 파일은 db의 접속 정보를 적으면 된다.
models 폴더는 디비 테이블을 정의 하는 곳이다.
먼저 models 폴더에사 index.js 에 필요없는 부분을 빼자.
'use strict';
const Sequelize = require('sequelize');
const env = process.env.NODE_ENV || 'development';
const config = require(__dirname + '/../config/config.json')[env];
const db = {};
let sequelize;
if (config.use_env_variable) {
sequelize = new Sequelize(process.env[config.use_env_variable], config);
} else {
sequelize = new Sequelize(config.database, config.username, config.password, config);
}
Object.keys(db).forEach(modelName => {
if (db[modelName].associate) {
db[modelName].associate(db);
}
});
db.sequelize = sequelize;
db.Sequelize = Sequelize;
module.exports = db;
나는 간단하게 user,board 테이블을 만들겠다.
user.js
const Sequelize = require('sequelize')
module.exports = class User extends Sequelize.Model{
static init(sequelize){
return super.init({
id:{
type:Sequelize.INTEGER,
autoIncrement:true,
primaryKey:true,
unique:true,
allowNull:false
},
userid:{
type:Sequelize.STRING(30),
allowNull:false,
}
},{
sequelize,
timestamps:false,
modelName:'User',
tableName:'user',
paranoid:false,
charset:'utf8',
collate:'utf8_general_ci'
})
}
static associate(db){
db.User.hasMany(db.Board,{foreignKey:'id',sourceKey:'id'})
}
}
board.js
const Sequelize = require('sequelize');
module.exports = class Baord extends Sequelize.Model{
static init(sequelize){
return super.init({
user_id:{
type:Sequelize.INTEGER,
allowNull:false
},
content:{
type:Sequelize.STRING(50),
allowNull:false,
}
},{
sequelize,
timestamps:false,
modelName:'Board',
tableName:'board',
paranoid:false,
charset:'utf8',
collate:'utf8_general_ci'
})
}
static associate(db){
db.Board.belongsTo(db.Board,{foreignKey:'user_id',targetKey:'id',onDelete:'Cascade'})
}
}
user 의 id 와 board 의 user_id foreignKey 설정하여 작업하겠다 .
이렇게 파일 작성후 index.js 에 코드를 추가 하겠다.
'use strict';
const Sequelize = require('sequelize');
const env = process.env.NODE_ENV || 'development';
const config = require(__dirname + '/../config/config.json')[env];
const db = {};
const User = require('./user');
const Board = require('./board');
let sequelize;
if (config.use_env_variable) {
sequelize = new Sequelize(process.env[config.use_env_variable], config);
} else {
sequelize = new Sequelize(config.database, config.username, config.password, config);
}
db.User = User;
db.Board = Board;
User.init(sequelize);
Board.init(sequelize);
Object.keys(db).forEach(modelName => {
if (db[modelName].associate) {
db[modelName].associate(db);
}
});
db.sequelize = sequelize;
db.Sequelize = Sequelize;
module.exports = db;
다음으로 app.js 에 DB에 접속하는 코드 추가
const {sequelize} = require('./models')
sequelize.sync({force:true})
.then(()=>{
console.log('db success')
})
.catch((err)=>{
console.log('db fail',err)
})
force의 값을 true 로 하면 테이블 삭제 후 재 생성 하며 false 로 할 경우 생성 안하고 접속합니다.
이렇게 코드 추가후
npm start 해보면
이렇게 접속에 완료가 되었다.
이번에는 간다한 CRUD를 작업해 보겠다.
routers 폴더에서 index.js 에
더보기
const { User, Board } = require('../models')
router.get("/adduser/:id", async (req, res) => {
const { id } = req.params;
const test = await User.create({
userid: id
})
console.log(test);
})