NodeJS博客实战21_前台博客内容展示和分页

- 日理万妓 2022-05-27 08:19 643阅读 0赞

源码地址:https://github.com/RidingACodeToStray/Nodejs_blog

1.主要功能

1)前台首页获取博客的所有内容信息,包括时间,用户,页数,分类等内容信息,并按照创建时间越晚越靠前的顺序返回给前台

2)前台对数据进行模板渲染

3)前台使用模板引擎进行分页

使用到的都是之前用过的一些功能点

2.主要代码

1)routers/main.js

  1. var express = require('express');
  2. var router = express.Router();
  3. var Category = require('../models/Category.js');
  4. var Content = require('../models/Content.js');
  5. //首页
  6. router.get('/',function(req,res,next){
  7. var data = {
  8. userInfo:req.userInfo,
  9. categories:[],
  10. page:Number(req.query.page) || 1,
  11. limit:3,
  12. pages:0,
  13. count:0
  14. };
  15. //读取所有的分类信息
  16. Category.find().sort({_id:-1}).then(function(categories){
  17. data.categories = categories;
  18. //读取内容总记录数
  19. return Content.count();
  20. }).then(function(count){
  21. data.count = count;
  22. //计算总页数向上取整
  23. data.pages = Math.ceil(data.count / data.limit);
  24. //page取值不能超过pages,去总页数和page中的最小值
  25. data.page = Math.min(data.page,data.pages);
  26. //page取值不能小于1
  27. data.page = Math.max(data.page,1);
  28. var skip = (data.page -1 ) * data.limit;
  29. //读取内容,最新的展示在最前面
  30. return Content.find().sort({_id:-1}).limit(data.limit).skip(skip).populate(['category','user']).sort({
  31. addTime:-1
  32. });
  33. }).then(function(contents){
  34. data.contents = contents; //将内容赋值给data属性
  35. // console.log(data);
  36. res.render('main/index',data);
  37. })
  38. })
  39. module.exports = router;

2)views/main/index.html

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>博客</title>
  6. <link rel="stylesheet" type="text/css" href="/public/css/main.css">
  7. <script type="text/javascript" src="/public/js/jquery-3.3.1.min.js"></script>
  8. <script type="text/javascript" src="public/js/index.js"></script>
  9. </head>
  10. <body>
  11. <div class="wrap">
  12. <div class="header">
  13. <ul>
  14. <li><a href="">首页</a></li>
  15. {% for category in categories %}
  16. <li><a href="/">{
  17. {category.name}}</a></li>
  18. {% endfor %}
  19. </ul>
  20. </div>
  21. <div class="body">
  22. <div class="cont">
  23. <ul>
  24. {% for content in contents %}
  25. <li>
  26. <h2>{
  27. {content.title}}</h2>
  28. <div>
  29. <span>
  30. <span>作者:</span><a href="">{
  31. {content.user.username}}</a>
  32. </span>
  33. <span>
  34. <span>时间:</span><a href="">{
  35. {content.addTime|date('Y-m-d H:i:s',-8*60)}}</a>
  36. </span>
  37. <span>
  38. <span>阅读:</span><a href="">{
  39. {content.views}}</a>
  40. </span>
  41. <span>
  42. <span>评论:</span><a href="">10</a>
  43. </span>
  44. </div>
  45. <div class="keyWords">
  46. {
  47. {content.desciption}}
  48. </div>
  49. <div class="readAll"><button>阅读全文</button></div>
  50. </li>
  51. {% endfor %}
  52. </ul>
  53. <div class="a-page">
  54. <span>
  55. {% if page <= 1 %}
  56. <span>没有上一页</span>
  57. {% else %}
  58. <a href="?page={
  59. {page-1}}">上一页</a>
  60. {% endif %}
  61. </span>
  62. <span class="a-pageInfo">
  63. {
  64. {page}}/{
  65. {pages}}
  66. </span>
  67. <span>
  68. {% if page >= pages %}
  69. <span>没有下一页</span>
  70. {% else %}
  71. <a href="?page={
  72. {page+1}}">下一页</a>
  73. {% endif %}
  74. </span>
  75. </div>
  76. </div>
  77. <div class="info">
  78. {% if userInfo._id %}
  79. <div class="showInfo">
  80. <p class="infoTitle">用户信息</p>
  81. <div class="name">{
  82. {userInfo.username}}
  83. </div>
  84. {% if userInfo.isAdmin %}
  85. <div class="info">你好管理员,欢迎来到博客
  86. <a href="/admin">进入管理</a>
  87. </div>
  88. {% else %}
  89. <div class="info">
  90. 你好,欢迎来到博客
  91. </div>
  92. {% endif %}
  93. <button class="logout">退出</button>
  94. </div>
  95. {% else %}
  96. <div class="registerInfo">
  97. <form>
  98. <p class="infoTitle">注册</p>
  99. <div class="inputInfo">
  100. <label for="user">用户名</label>
  101. <input type="text" name="username" id="user">
  102. </div>
  103. <div class="inputInfo">
  104. <label for="pwd">密码</label>
  105. <input type="password" name="pwd" id="pwd">
  106. </div>
  107. <div class="inputInfo">
  108. <label for="rpwd">确认</label>
  109. <input type="password" name="rpwd" id="rpwd">
  110. </div>
  111. <div class="infoBtn">
  112. <input type="button" name="" value="注册" class="registerBtn">
  113. </div>
  114. <div class="infoBtn">
  115. <span>已有账号</span>
  116. <a href="javascript:void(0)" class="toLogin">马上登录</a>
  117. </div>
  118. <div class="registerRemind"></div>
  119. </form>
  120. </div>
  121. <div class="hide loginInfo">
  122. <form>
  123. <p class="infoTitle">登录</p>
  124. <div class="inputInfo">
  125. <label for="user2">用户名</label>
  126. <input type="text" name="user2" id="user2">
  127. </div>
  128. <div class="inputInfo">
  129. <label for="pwd2">密码</label>
  130. <input type="password" name="pwd2" id="pwd2">
  131. </div>
  132. <div class="infoBtn">
  133. <input type="button" name="" value="登录" class="loginBtn">
  134. </div>
  135. <div class="infoBtn">
  136. <span>还没注册</span>
  137. <a href="javascript:void(0)" class="toRegister">马上注册</a>
  138. </div>
  139. <div class="loginRemind"></div>
  140. </form>
  141. </div>
  142. {% endif %}
  143. <div>
  144. <p class="infoTitle">社区</p>
  145. <ul>
  146. <li>
  147. <a href="">制度规则</a>
  148. </li>
  149. <li>
  150. <a href="">社区之家</a>
  151. </li>
  152. </ul>
  153. </div>
  154. </div>
  155. </div>
  156. </div>
  157. </body>
  158. </html>

发表评论

表情:
评论列表 (有 0 条评论,643人围观)

还没有评论,来说两句吧...

相关阅读