반응형
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 %>
<%=curDate %>
<%=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>
반응형
'IT > web' 카테고리의 다른 글
Node.js] 게시판 만들기4 / 글 수정 기능 (findByIdAndUpdate) (2) | 2020.02.14 |
---|---|
Node.js] 게시판 만들기3 // 글 삭제 기능 (0) | 2020.02.13 |
Node.js] 게시판 만들기1 // 글 작성, 작성된 글 보기 (0) | 2020.02.11 |
Node.js] 구글 패스포트로 사용자 인증 (0) | 2020.02.10 |
Node.js] 플래쉬 메시지 (0) | 2020.02.08 |
댓글