티스토리 뷰

[환경]

비주얼 코드

DB: postgreSQL

서버 : express 모듈

Sequelize : DB 작업을 쉽게 하게 해주는 ORM 라이브러리. 프라미스 기반이라 비동기 로직 작성에 유리하다.

(ORM (Object Relational Mapping) : 자바스크립트 객체와 관계형 데이터 베이스를 쿼리 없이 서로 연결 )

 

[설치 ]

  • 콘솔에 명령문 실행
npm init
npm i express morgan sequelize sequelize-cli postgres pg

npm i -D nodemon

npx sequelize init

(다른 필요한 미들웨어와 노드문(: 변경을 자동으로 반영)도 같이 설치하였다.)

 

[DB 데이터 베이스 생성]

  • 콘피그 확인

 

>>>pgAdmin

  • DB에 database에 설정한 이름과 같은 데이터베이스가 필요하다.

[postgreSQL연동]

>>code

  • 콘피그 정보 수정 : DB와 일치시킨다!

  • package.json : 실행 명령문 추가 (노드 문 모듈 )

콘솔에 npm start 하면 실행된다. 디버그 눌러도 실행됨.

 

[시큘라이즈로 DB와 연결]

  • 코드 수정

> modles>index.js

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

const express = require('express')
const path = require('path')
const morgan = require('morgan')

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

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

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

app.use(morgan('dev'))
app.use(express.static(path.join(__dirname,'public')))
app.use(express.json())
app.use(express.urlencoded({extended:false}))

app.use((req,res,next)=>{
  const error = new Error(`${req.method}${req.url} 라우터가 없습니다`)
  error.status = 404
  next(error)
})

app.use((err,req,res,next)=>{
  res.locals.message = err.message;
  res.locals.error = process.env.NODE_ENV !=='production' ? err : {}
  res.status(err.status || 500)
  res.render('error')
})

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

 

[sequelize로 DB에 테이블 생성하기]

> department.js 작성

(department는 테이블 이름이다. 클래스를 생성해준다. 컬럼의 요소들의 속성도 설정해줄 수 있다.)

const Sequelize = require('sequelize')

module.exports = class Department extends Sequelize.Model {
  static init(sequelize) {
    return super.init({
      name: {
        type: Sequelize.STRING(50)
      },
      code: {
        type: Sequelize.STRING(50)
      },
      description: {
        type: Sequelize.TEXT
      }
    }, {
      sequelize,
      timestamps: true,
      underscored: false,
      modelName: 'Departments',
      tableName: 'departsments',
      paranoid: false,
      charset: 'utf8',
      collate: 'utf8_general_ci'
    })
  }
  static associate(db) {
    db.Department.hasMany(db.User, { foreignKey: 'departmentId', sourceKey: 'id'})
  }
}

(user.js)

const Sequelize = require('sequelize')

module.exports = class User extends Sequelize.Model {
  static init(sequelize) {
    return super.init({
      name: {
        type: Sequelize.STRING(100),
      },
      userid: {
        type: Sequelize.STRING(255),
        unique: true,
        allowNull: false
      },
      password: {
        type: Sequelize.STRING(500),
        allowNull: false
      },
      role: {
        type: Sequelize.STRING(20),
      },
      email: {
        type: Sequelize.STRING(255)
      },
      phone: {
        type: Sequelize.STRING(255)
      },
      updated_pw_date: {
        type: Sequelize.DATE
      },
    }, {
      sequelize,
      underscored: true,
      timestamps: true,
      paranoid: false,
      charset: 'utf8',
      collate: 'utf8_general_ci'
    })
  }
  static associate(db) {
    db.User.belongsTo(db.Department, { foreignKey: { name: 'departmentId', onDelete: 'SET NULL' }})
    db.User.hasMany(db.Device, {
      foreignKey: { name: 'userId', onDelete: 'SET NULL' }
    })
  }
}

(deparment는 user의 부서와 연결시킬 것이라, associate로 연결해주었다.)

 

> models >index  

:department 추가해준다. index는 각각의 테이블을 모아주는 역할

const Sequelize = require('sequelize');
const Department = require('./department')

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;
db.Department = Department
Department.init(sequelize)

module.exports = db;

 

  • DB에 부서 테이블 완성됨.  : 코드 실행하면 테이블 생긴다.

 

라우터 관리 : 부서 페이지에서 할 일 결정

> route > department

const { Router } = require('express')
const express = require('express')
const { Department } = require('../models')
const { sync } = require('../models/department')

const route = express.Router()

Router.route('/')
.get(async(req,res,next)=>{
const department = await Department.findAll() //테이블에 뭐 들어있는지 다 가져와
res.json(department)//객체로 값 전달되기 떄문에 json으로 받아온다,
})
.post (async (req,res,next)=>{
  const {name, code, description} = req.body// id랑 등등은 자동이라 이것만 중요
  const department = await Department.create({
    name,
    code,
    description
  })//(db한테 원격으로query 날림 디비에 데이터 들어감)대신에 바로 시퀄라이져로 보내버림
  console.log('성공');
})


  • cmd 콘솔에서 실행시키기
cd 폴더경로

npm init

npm install //모듈 다운 안 받아져 있을 경우만

npm start //보통의 경우 이것만 해주면 된다

서버 실행 확인한다. 

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함