딱 추석동안 스택만 부여잡고 있어서 해커톤이 끝난 주말동안 만들어보았다.
게시판을 만드는 프로젝트로 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
댓글