nodejs
[Node.js] 게시판 만들기 ( DB + Code )mysql사용
jackypark
2022. 9. 23. 21:23
전 포스팅 이어서 db함수를 호출하고 db함수 내용은 보여주지 않았습니다 이번에는 그 함수 코드를 포스팅할 것입니다. :
https://jackycode.tistory.com/83
[Node.js]게시판 만들기 ( 코드리뷰 )
전 포스팅 내용에 시연 영상 및 목표 설정을 담았다. https://jackycode.tistory.com/82?category=1034822 [Node.js] 게시판 만들기 (목표설정,사용모듈소개) 목표 설정: 내가 방학 때 공부한 jsp로 만든 간단 쇼..
jackycode.tistory.com
오늘은 게시판 만들기 중 DB 코드 및 몇 개 없는 db테이블을 보여드리겠습니다.
DB 테이블입니다.
board는 게시판 테이블이고 users는 회원정보 테이블입니다.

... 사실 name이랑 password은 varchar형태로 만들어도 됩니다.. 그냥 귀찮아서 Text형태로 만들었던 것 같은데 수정해야 할 것 같습니다.
| board | |
| num | 글번호: (auto_incresment)를 줘서 insert가 되면 자동으로 번호를 순서대로 줌 |
| id | FK(회원아이디) |
| name | 글쓴이 |
| title | 제목 |
| content | 글내용 |
| date | 작성일자:(CURRENT_DATE)를 디폴트 값로 줘서 글등록시 해당 날짜가 삽입됨 |
| hit | 조회수 |
| user | |
| id | 회원아이디(pk) |
| name | 회원이름 |
| age | 회원나이 |
| password | 비밀번호 |
다음은 sql 쿼리문을 실행시키는 함수들입니다.
구동방식은 저번 포스팅에 나와있습니다.
var insertBoard=function(id,name,title,content,callback){//작성한 글을 db에 저장시킬 함수
console.log('insertBoard 호출됨');
//케넥션풀에서 연결객체를 가져온다
pool.getConnection(function(err,conn){
if(err){
if(conn){
conn.release(); //반드시 해제해야함 풀로 다시 커넥션을 반납해주는 과정
}
callback(err,null);
return;
}
var data={id:id,name:name,title:title,content:content};
var exec= conn.query('insert into board set ?',data,//board테이블에 data내용 삽입
function(err,result){
conn.release();
console.log('실행된 SQL: '+exec.sql);
if(err){
console.log('sql 실행시 에러발생.');
callback(err,null);
return;
}
callback(null,result);//찾은데이터를 콜백함수에 넣어서 삽입
});
});
}
var editBoard = function(name,title,content,num,callback){//작성한 글 db수정시킬 함수
//커넥션 풀에서 연결객체 가져오기
pool.getConnection(function(err,conn){
if(err){
if(conn){
conn.release();
}
callback(err,null);//콜백함수 호출
return;
}
//sql 문 실행
var exec= conn.query("update board set name=?, title=?, content=? where num=?",[name,title,content,num],//가져온 글번호와 일치한 목록을 가져와서 글내용 수정
function(err,rows){
conn.release();
console.log('실행된 SQL' +exec.sql);
if(err){
callback(err,null);
return;
}
callback(null,rows);//찾은데이터를 콜백함수에 넣어서 삽입
} );
});
}
var boardView = function(num,callback){//선택한 목록의 글을 db에서 가져올 함수
//커넥션 풀에서 연결객체 가져오기
pool.getConnection(function(err,conn){
if(err){
if(conn){
conn.release();
}
callback(err,null);
return;
}
//sql 문 실행
var exec= conn.query("select * from board where num = ?",num,//글번호와 일치한 글을 가져옴
function(err,rows){
conn.release();
console.log('실행된 SQL' +exec.sql);
if(err){
callback(err,null);
return;
}
if(rows.length>0){//데이터를 찾았을경우
console.log('데이터 찾음');
callback(null,rows);//찾은데이터를 콜백함수에 넣어서 삽입
}else{
console.log('데이터 찾지 못함.');
callback(null,null);
}
} );
});
}
var updateHit = function(num){//조회수 db에 증가시킬 함수
//커넥션 풀에서 연결객체 가져오기
pool.getConnection(function(err,conn){
if(err){
if(conn){
conn.release();
}
}
//sql 문 실행
var exec= conn.query("select hit from board where num = ?",num,//선택한 목록의 조회수를 가져옴
function(err,rows){
conn.release();
console.log('실행된 SQL' +exec.sql);
if(err){
console.log('hit errr');
return;
}
var hit = 0;
if(rows.length>0){//데이터를 찾았을경우
hit=rows[0].hit+1;//가져온 조회수에서 +1함
console.log('데이터 찾음');
console.log(hit);
//조회수 +1 한값을 db에 업데이트
conn.query("update board set hit = ? where num=?",[hit,num],function(err,result){
if(err){
console.log('hit222 errr');
return;
}
});
}else{
console.log('데이터 찾지 못함.');
}
} );
});
}
var deleteBoard = function(num,callback){//선택한글을 db에서 삭제할 함수
//커넥션 풀에서 연결객체 가져오기
pool.getConnection(function(err,conn){
if(err){
if(conn){
conn.release();
}
callback(err,null);
return;
}
//sql 문 실행
var exec= conn.query("delete from board where num = ?",num,//선택한 글을 삭제할 sql문
function(err,rows){
conn.release();
console.log('실행된 SQL' +exec.sql);
if(err){
callback(err,null);
return;
}
callback(null,rows);
} );
});
}
var authUser = function(id,password,callback){ //로그인한 정보가 db에 있는 지 확인할 함수
console.log('authUser 호출됨: ' +id+', '+password);
//커넥션 풀에서 연결객체 가져오기
pool.getConnection(function(err,conn){
if(err){
if(conn){
conn.release();
}
callback(err,null);
return;
}
var columns = ['id','name','age'];
var tablename='users';
//sql 문 실행
var exec= conn.query("select ?? from ?? where id = ? and password = ?",[columns,tablename,id,password],//배열은 ??값에 들어감
function(err,rows){
conn.release();
console.log('실행된 SQL' +exec.sql);
if(err){
callback(err,null);
return;
}
if(rows.length>0){//데이터를 찾았을경우
console.log('사용자 찾음');
callback(null,rows);//찾은 데이터를 콜백함수호출
}else{
console.log('사용자 찾지 못함.');
callback(null,null);
}
} );
});
}
var viewBoardList = function(items,text,callback){//게시판목록들을 db에서 가져올 함수
console.log('viewBoardList 호출됨');
//커넥션 풀에서 연결객체 가져오기
pool.getConnection(function(err,conn){
if(err){
if(conn){
conn.release();
}
callback(err,null);
return;
}
console.log('데이터베이스 연ruf 스레드 아이디: '+ conn.threadId);
if(items==null&&text==null){//검색할 경우가아닌 처음으로 게시판이동시
//sql 문 실행
var exec= conn.query("select * from board",//목록들을 다가져옴
function(err,rows){
conn.release();
console.log('실행된 SQL' +exec.sql);
if(err){
callback(err,null);
return;
}
if(rows.length>0){//데이터를 찾았을경우
console.log('리스트 찾음');
callback(null,rows);//데이터를 콜백함수에 넣어 호출
}else{
console.log('리스트 찾지 못함.');
callback(null,null);
}
} );
}else{
var qText= "%"+text+"%";//이렇게 안하면 like 해서 저 %를 인식을 제대로 안해서 따로 빼둠
//items=검색할 목록(제목,글쓴이,글내용) qText=입력한내용
// 입력한내용이 포함된글이 있는지 sql문
var exec= conn.query("select * from board where "+ items+" like ? ",qText,
function(err,rows){
conn.release();
console.log('실행된 SQL' +exec.sql);
if(err){
callback(err,null);
return;
}
if(rows.length>0){//데이터를 찾았을경우
console.log('리스트 찾음');
callback(null,rows);//데이터를 콜백함수에 삽입하여 호출
}else{
console.log('리스트 찾지 못함.');
callback(null,null);
}
} );
}
});
}
느낀 점:
nodejs를 공부한 후 내가 전에 공부한 jsp로 만든 게시판을 nodejs로 게시판을 만들었다.
첫 1주는 이해가 안됐지만 막상 웹서버를 만들고 CRUD를 만들어 보니깐 서서히 이 흐름에 대해서 이해하기 시작했다.
만들면서 느꼈지만 JSP와 서로 같으면서도 뭔가가 다르다.
뭐가 같고 뭐가 다른지 공부해서 다음 포스팅 내용으로 포스팅해야겠다.