반응형

프로젝트 구조

사용 모듈

구현 코드 설명

app.js

var express = require('express');
var cors = require('cors');
var app = express();

app.use(cors({        // cors설정을 해줘야 front서버와 통신 가능
    origin: 'http://127.0.0.1:8080',
    credentials:true,
}));
app.use(express.json());
app.use(express.urlencoded({ extended: true }));

var content = require('./routes/content');
app.use('/content', content);

app.listen(52273, function() {
    console.log('Server Running at http://127.0.0.1:52273');
});

routes/content.js ( 페이지 라우팅을 하나밖에 안해서 사실상 거의 모든 내용 )

var router = require('express').Router();
var mysql = require('mysql2');
var db = require('.././models');
db.sequelize.sync();

router.post('/write', function(req, res){    // 글 작성
    db.content.create({                        // 게시판번호와 게시글정보를 req.body로 받아와 db에 삽입
        boardnum: req.body.boardnum,
        writer: req.body.writer,
        title: req.body.title,
        text: req.body.text,
    }).then(function(){
      return res.status(200).json({
          message: '글 작성 완료!',
      })
    }).catch(function(err){
        console.log(err);
        return res.status(404).json({message: '에러뜸'});
    })
});
router.post('/boardlist', function(req, res){    // 게시글 불러오기
    db.content.findAll({
        where: {
            boardnum: req.body.boardnum    // 게시판별로 DB가 따로있는게 아니여서 게시판 번호 필요
        },
        offset: 0 + (req.body.page - 1) * 10,    
        // offset 설정을 통해 페이지에 맞는 글 찾을 수 있음
        // 1page이면 offset 0을 통해 처음 10개 가져옴
        limit: 10,            // 글 10개만 가져오기
        order: [['id', 'ASC']],        // id기준으로 오름차순 정렬
        raw: true,            // raw: true 설정을 해줘야 DB에서 field 정보만 가져옴
    }).then(result => {
        return res.status(200).json(result);
    }).catch(err => {
        console.log(err);
        return res.status(404).json({message: '에러뜸'});
    })
});
router.post('/boardlistcnt', function(req, res){    // 해당 게시판의 게시글 개수 가져오기
    db.content.findAndCountAll({        
    // findAndCoutAll을 통해 조건에 맞는 내용들과 개수를 가져옴
    // 이 때 결과는 result.rows, 갯수는 result.count로 받아옴
        where: {
            boardnum: req.body.boardnum
        },
        raw: true,
    }).then(result => {
        return res.status(200).json(result.count);
    }).catch(err => {
        console.log(err);
        return res.status(404).json({message: '에러뜸'});
    })
});
router.post('/content', function(req, res){    // 게시글 보기
    db.content.findOne({            // id에 맞는 게시글 정보 하나만 불러오면 됨
        where: {
            id: req.body.id
        }, raw:true,
    }).then(result => {
        return res.status(200).json(result);
    }).catch(err => {
        console.log(err);
        return res.status(404).json({message: '에러뜸'});
    })
});
router.post('/delete', function(req, res){    // 게시글 삭제
    db.content.destroy({            // destroy를 통해 DB에서 조건에 맞는 정보 삭제
        where: {
            id: req.body.id
        },
    }).then(function(){
        return res.status(200).json({
            message: '글 삭제 완료!'
        });
    }).catch(err =>{
        console.log(err);
        return res.status(404).json({message: '에러뜸'});
    })
});
router.post('/edit', function(req, res){    // 게시글 수정
    db.content.update({text: req.body.text}, {    // update를 통해 조건에 맞는 게시글의 text filed를 수정
        where: {
            id: req.body.id
        },
    }).then(function(){
        return res.status(200).json({
            message: '글 수정 완료!'
        });
    }).catch(err =>{
        console.log(err);
        return res.status(404).json({message: '에러뜸'});
    })
});
module.exports = router;

models/content.js

module.exports = (sequelize, DataTypes) => {
    return sequelize.define('content', {
        writer: {    	// 작성자
            type: DataTypes.STRING(30),
            allowNull: false,
        },
        title: {        // 제목
            type: DataTypes.STRING(30),
            allowNull: false,
        },
        text: {        // 글 내용
            type: DataTypes.STRING(3000),
        },
        boardnum: {    // 게시판 번호
            type: DataTypes.INTEGER,
            allowNull: false,
        },
    },{
        charset: 'utf8',
        collate: 'utf8_general_ci',    // 이걸 해줌으로써 DB에 한글사용 가능
    });
}

models/index.js

db.content = require('./content')(sequelize, Sequelize);
  • 'npx sequelize init'을 하면 자동으로 폴더와 파일들이 생성되는데 이때, models/index.js도 생성됨
  • content라는 table 사용을 위해 맨 아래 'module.exports = db; ' 윗 줄에 위의 코드 삽입

config/config.json

"development": {
    "username": "root",
    "password": "root1234",
    "database": "board",
    "host": "127.0.0.1",
    "dialect": "mysql",
    "timezone": "+09:00"
},
  • 이 부분에서 'username', 'password', 'database'(DB명)은 자기 설정에 맞게 수정해주고,
  • 맨 밑에 "timezone" : "+09:00" 코드를 추가해줘야됨
  • sequelize는 기본적으로 utc 시간 기준으로 설정되기 때문에 한국시간에 맞추기 위해서는 +9를 해줘야됨
  • 시간을 안 쓸때는 필요없지만, 이 프로젝트에서는 updatedAt, createdAt을 사용해서 필요
반응형

↓ 클릭시 이동

복사했습니다!