본문 바로가기
Project

[Node.js] 2021 Mirim Tech Talk Hackathon

by M개발자 2021. 9. 25.
반응형


딱 추석동안 스택만 부여잡고 있어서 해커톤이 끝난 주말동안 만들어보았다.

게시판을 만드는 프로젝트로 CRUD를 구현해보았다.

1. Node.js 초기 세팅

이렇게 또 찾아볼까봐 블로그에 정리했다.

2. db 설계

CREATE TABLE board (
    id INT PRIMARY KEY AUTO_INCREMENT,
    title VARCHAR(100) NOT NULL,
    description TEXT NOT NULL
);

해커톤에서 주어진 컬럼은 title과 description으로, 기본적으로 테이블에는 PK값이 필요해 id를 자동생성으로 주었다.

 

3. router 나누기

폴더 구조

app.js에 boardRouter로 /boards 폴더와 연결한다.

app.js

const boardRouter = require('./router/boards');
app.use('/boards', boardRouter);

 

/router/boards.js

const express = require('express');
const router = express();
const connection = require('../mysql');

module.exports = router;

 

나는 야매라 자세하게 공부해보지는 않고 항상 이렇게 해왔기 때문에... 자세하게 알지는 못한다...

4. CREATE

조건
메소드 post

request body
{
  "title": "테스트 제목 입니다.",
  "description": "테스트 글 입니다."
}

/router/board.js

router.post('/', function (req, res) {
    let title = req.body.title; //requst body 'title'로 넘어온 값을 title 변수에 저장
    let description = req.body.description; //requst body 'description'으로 넘어온 값을 description 변수에 저장
 
    let sql = 'INSERT INTO board (title, description) VALUES(?, ?);';
    //sql insert 구문, title, description에 body로 넘어온 값을 ? 자리에 넣는다.
    let params = [title, description];
    //params로 insert에 넣을 값을 배열화한다.
    
    //첫번째 인자 : sql 구문
    //두번째 인자 : ? 자리에 들어갈 파라미터 전달값 
    // function의 result : 반환값
    connection.query(sql, params, function (err, result) {
        if (err) {
            console.log(err); // 에러 발생 시 콘솔에 찍힘 (없으면 왜 오류났는지 모름)
            return res.sendStatus(400); // 400 반환
        }
        res.json(req.body); // 받은 값 반환
        console.log("result : " + JSON.stringify(req.body)); 
    });
})

디비에도 잘 들어온다 ~~ 

 

5. READ

게시글 목록 API로 db에 있는 레코드를 가져온다. 

조건
메소드 get

request body
[
  {
    "id": 1,
    "title": "테스트 제목 입니다.",
    "description": "테스트 글 입니다."
  }
]

조건에 보니 id 필드가 있는게 맞았다~~

/router/board.js

router.get('/', function(req,res){
    let sql = 'select * from board;'; //sql 구문
    
    //첫번째 인자 : sql 구문
    //function - result : sql문에 따른 반환 데이터
    connection.query(sql, function (err, result) {
        if (err) {
            console.log(err);
            return res.sendStatus(400);
        }
        res.json(result);
        console.log("result : " + JSON.stringify(result));
    });
})

[

    {

        "id"1,

        "title""1. title",

        "description""1) description"

    }

]

 

6. UPDATE

method  post

url  /boards/:id

parameter  id

query  title, destription

router/boards.js

router.post('/:id', function(req, res){
    let id = req.params.id; // 파라미터로 받음 id값, 게시글의 고유 번호이다.
    let title = req.body.title; // 변경된 타이틀을 body로 가져온다. 
    let description = req.body.description; // 변경된 내용물을 body로 가져온다. 

    let sql = 'UPDATE board SET title = ?, description=? WHERE id = ?'; // update sql 구문
    let params = [title, description, id]; // 위 구문 물음표 순서대로 값을 넣어준다. 

    connection.query(sql, params, function (err, result) {
        if(err) console.log(err);
        if(params[0].length == 0 || params[1].length == 0){
            return res.send('값을 다 채워주세요.');
        }
        res.json(req.body);
        console.log(result);
    });
})

ERROR 1366 (HY000): Incorrect string value: '\xEC\x9D\xB4\xEB\xAF\xB8...' for column 'name' at row 1

오류 발생

테이블 한글 설정을 안해줘서 생기는 오류로 

ALTER TABLE table_name CONVERT TO CHARSET utf8;

입락하면 정상적으로 값이 바뀐다.

 

7. DELETE 

method  delete

url  /boards/:id

parameter  id

router/boards.js

router.delete('/:id', function(req, res){
    let id = req.params.id; // 파라미터로 받음 id값, 게시글의 고유 번호이다.

    let sql = 'DELETE from board where id = ?'; // delete sql 구문
    connection.query(sql, id, function (err, result) {
        if(err) console.log(err);
        res.send('삭제되었습니다.');
        console.log(result);
    });
})

 

잘 삭제되었다. ~~

 


참고자료

db 한글 입력시 오류  https://mitny.tistory.com/208

My Github https://github.com/m04j00/MirimHackathon

 

반응형

'Project' 카테고리의 다른 글

[3분 코딩] 끝  (0) 2021.11.10

댓글