본문 바로가기
IT/web

Node.js] 게시판 만들기2 // 글 리스트 보기, 조회수 조회

by 깻잎쌈 2020. 2. 12.
반응형

routes/post.js

// 글 리스트 조회 
var listPost = function (req, res) {
    console.log('post.js의 listpost 호출됨');

    var paramPage = req.body.page || req.query.page;
    var paramPerPage = req.body.perPage || req.query.perPage;

    console.log('요청 파라미터 : ' + paramPage + ', ' + paramPerPage);

    var database = req.app.get('database');

    if (database) {

        var options = {
            page: paramPage,
            perPage: paramPerPage
        }

        database.postModel.list(options, function (err, result) {
            if (err) {
                console.log('게시판에 글 목록 조외 중 오류 발생 ' + err.stack);

                res.writeHead('200', {
                    'Content-Type': 'text/html;charset=utf8'
                });
                res.write('<h2>게시판에 글 목록 조외 중 오류 발생</h2>');
                res.end();

                return;
            }

            if (result) {
                console.log('결과 : ' + result);

                //전체 문서 객체 수 확인
                database.postModel.count().exec(function (err, cnt) {
                    res.writeHead('200', {
                        'Content-Type': 'text/html;charset=utf8'
                    });

                    //렌더링 후 전송
                    var context = {
                        title: '글 목록 ',
                        posts: result,
                        page: parseInt(paramPage),
                        pageCount: Math.ceil(cnt / paramPerPage),
                        perPage: paramPerPage,
                        totalRecords: cnt,
                        size: paramPerPage
                    };

                    req.app.render('listpost', context, function (err, html) {
                        if (err) {

                            console.log('글 목록 생성 중 오류 발생 ' + err.stack);

                            res.writeHead('200', {
                                'Content-Type': 'text/html;charset=utf8'
                            });
                            res.write('<h2>글 목록 생성 중 오류 발생</h2>');
                            res.end();

                            return;

                        }

                       // console.log('글목록 :' + html);
                        res.end(html);
                    });
                });
            }


        });
    }
}


module.exports.listpost = listPost;

 

스키마에 조회수 추가하고 

글 조회될 때마다 조회수 1 증가 

post.js의 showPost 메소드 추가 

var showPost = function (req, res) {
    
    if (database) {
        // 글 리스트 
       ...     
            if (result) {
                // 조회수 증가 
                result.clickedNum++;
                result.save();
                
                ..

 


 

listpost.ejs

<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, height=device-height, initial-scale=1">

    <title>글 리스트</title>

    <link href="/public/semantic.min.css" rel="stylesheet">

    <style>
    ...
    </style>


    <script src="/public/jquery.min.js"></script>
    <script src="/public/semantic.min.js"></script>

    <script>
        function listpost(page, perPage) {
            document.location = '/process/listpost?page=' + page + '&perPage=' + perPage;
        }

    </script>

</head>

<body>

    <div class="container">
        <br>

        <div class="ui raised segment">
            <a class="ui blue ribbon label">게시판</a>
            <span id="board_title"><%=title %></span>


            <div class="ui blue fluid card">
                <div class="content">


                    <div class="ui grid">
                        <div class="two wide column">번호</div>
                        <div class="eight wide column">제목</div>
                        <div class="two wide column">작성자</div>
                        <div class="two wide column">작성일</div>
                        <div class="two wide column">조회수</div>
                    </div>

                    <div class="ui very relaxed selection celled list">
                                    <!-- (전체 페이지 수 - 현재페이지수) * 페이지당 글 수 -->
                        <%  var noStart =  ( page) * perPage;                           
							
							    for (var i = 0; i < posts.length; i++) {
								   var curTitle = posts[i]._doc.title;
								   var curContents = posts[i]._doc.contents;
								   var curWriter = posts[i]._doc.writer.email;                              
                                    var curNo = noStart + (i+1); // 1부터 시작 
                                    var curDate = posts[i]._doc.created_at;
                                    var curclickedNum = posts[i]._doc.clickedNum;
								   %>
                        <div class="item">
                            <div class="ui grid">
                                <div class="two wide column"><%=curNo %> </div>
                                <div class="fourteen wide column" onclick="javascript:window.location='/process/showpost/<%=posts[i]._id %>'">
                                    <div class="ui header">
                                        <h4 class="ui left aligned header">
                                            <%=curTitle %>
                                        </h4>
                                        <h5 class="ui right aligned orange header">
                                            <%=curWriter %>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                                            <%=curDate %>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                                            <%=curclickedNum%> 
                                        </h5>
                                    </div>
                                </div>
                            </div>
                        </div>
                        <% } %>

                    </div>

                    <br>
                    <div class="tiny ui basic buttons">
                        <%
					 			if (page > 0) {
					 		%>
                        <div class="ui icon button" onclick="listpost(0, <%=perPage %>)">
                            <i class="backward icon"></i>
                        </div>
                        <div class="ui icon button" onclick="listpost(<%=(page-1) %>, <%=perPage %>)">
                            <i class="left chevron icon"></i>
                        </div>
                        <%
					 			} else {
					 		%>
                        <div class="ui disabled icon button">
                            <i class="backward icon"></i>
                        </div>
                        <div class="ui disabled icon button">
                            <i class="left chevron icon"></i>
                        </div>
                        <%
					 			}
					 		%>
                        <% 
					 			var initial = (Math.floor(page / 10) * 10);
					 			console.log('initial : ' + initial);
					 			
					 			var max = pageCount - initial;
					 			if (max > 10) {
					 				max = initial + 10;
					 			}else {
					 				max = initial + max;
					 			}
					 			console.log('max : ' + max);
					 			
					 			for (var i = initial; i < max; i++) {
					 				if (i != page) {
					 		%>
                        <div class="ui button" onclick="listpost(<%=i %>, <%=perPage %>)">
                            <%= i %>
                        </div>
                        <%
					 				} else {
					 		%>
                        <div class="ui active basic button">
                            <%= i %>
                        </div>
                        <% 
					 				}
					 			}
					 		%>
                        <%
					 			if ((page+1) < pageCount) {
					 		%>
                        <div class="ui icon button" onclick="listpost(<%=(page+1) %>, <%=perPage %>)">
                            <i class="right chevron icon"></i>
                        </div>
                        <div class="ui icon button" onclick="listpost(<%=(pageCount-1) %>, <%=perPage %>)">
                            <i class="forward icon"></i>
                        </div>
                        <%
					 			} else {
					 		%>
                        <div class="ui disabled icon button">
                            <i class="right chevron icon"></i>
                        </div>
                        <div class="ui disabled icon button">
                            <i class="forward icon"></i>
                        </div>
                        <%
					 			}
					 		%>
                    </div>

                    <br><br>
                    <a class="ui button" href='/process/listpost?page=0&perPage=5'>재요청</a>
                    <a class="ui button" href='/public/addpost.html'>글쓰기</a>

                </div>
            </div>
        </div>
    </div>

</body>

</html>
반응형

댓글