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와 서로 같으면서도 뭔가가 다르다.

뭐가 같고 뭐가 다른지 공부해서 다음 포스팅 내용으로 포스팅해야겠다.