1,前台 ,/views/main/index.html ,将文章 id 通过url 传送给后台

{% for content in contents %}
<div class="panel-body">
<div class="panel panel-info">
<div class="panel-body">
<h4>【 {{content.title}} 】</h4>
<p>
作者 : {{content.user.username}} &nbsp;
发布时间 : {{content.addTime|date('Y-m-d')}} &nbsp;
阅读数量 : {{content.views}} &nbsp;
评论 : {{content}} &nbsp;
</p>
<p>简介 : {{content.description}}</p>
<p>
<a class="btn btn-info" href="/views?contentid={{content.id}}" role="button">内容详情</a>
</p>
</div>
</div>
</div>
{% endfor %}
 
2,后台 , /router/main.js ,增加  view 路由 ,读取文章的内容 ,渲染文章的页面 。 读取导航栏 。增加访问量。
 
/**
* 因为导航栏是前台每个栏目显示都需要的,所以不应该写在【/】 路由中,所以使用中间件的方法处理【 通用的数据 】
*/
router.use((req,res,next)=>{
/**
* !!!【data必须是全局对象,否则中间件的下一个接收不到】
*/
data = {
 
userInfo:req.userInfo,
categories:[], //所有分类的信息
}
Category.find().then((categories)=>{
data.categories = categories
// console.log(data)
/**注意 next 的出口 */
next()
})
})
/**
* 首页
*/
router.get('/',(req,res)=>{
/**
* 从数据库中读取分类信息
* rs是一个数组类型的记录
*/
// data 不能重新等于新的对象
data.category =req.query.category || ''
data.page = Number(req.query.page || 1)
data.limit = 2
data.pages = 1
data.count= 0
 
var where = {}
if(data.category){
where.category = data.category
}
// console.log('where => '+where)
/**获取所有分类信息 */
Content.where(where).countDocuments().then((count)=>{
//为了方便,存入data
data.count = count
// 计算总页数,向上取整数,去最大值
data.pages = Math.ceil(data.count / data.limit)
 
// 页数取值不能超过总页数的值
data.page = Math.min(data.page,data.pages)
 
// 取值不能小于1
data.page = Math.max(data.page,1)
// 不需要被分配到模板 data 中 ,直接存入变量
var skip = (data.page-1)*data.limit
/**
* 读取文章并返回
*/
 
return Content.where(where).find().sort({_id:-1}).limit(data.limit).skip(skip).populate(['category','user'])
// 不 return 下面的参数将没有数据
}).then((contents)=>{
data.contents = contents
// console.log(data)
/**最后渲染 */
res.render('main/index',data)
})
 
})
router.get('/view',(req,res)=>{
contentid = req.query.contentid || ''
Content.findOne({
_id:contentid
}).then(content=>{
data.content = content
/** 增加阅读数 */
content.views++
content.save()
res.render('main/view',data)
})
})
 
3,前台展示 /views/main/view.html
 
<div class="panel-heading">文 章</div>
 
<h4>【 {{data.content.title}} 】</h4>
<p>
作者 : {{data.content.user.username}} &nbsp;
发布时间 : {{data.content.addTime|date('Y-m-d')}} &nbsp;
阅读数量 : {{data.content.views}} &nbsp;
评论 : {{data.content}} &nbsp;
</p>
<p>简介 : {{data.content.description}}</p>
<p>
内容 : {{data.content.content}}
</p>
 
 

21 ~ express ~ 内容详情展示 和 阅读数处理的更多相关文章

  1. 通过日志过滤的方法,统计每天内容详情页面的PV数

    1.目的: 每天凌晨0点1分统计用户点击进入内容详情页的次数,对内容点击量形成榜单. 2.分析: A./data/log/epg.access.log日志实时打印用户访问页面的日志,并且每天凌晨0点会 ...

  2. mxonline实战9,我要学习功能块,机构详情展示,收藏功能

    对应github地址:第9天   一. 实现我要学习功能

  3. ZT 感触的屌丝职场记 投递人 itwriter 发布于 2013-05-27 09:21 评论(18) 有3402人阅读 原文链接 [收藏] « »   作者@幻想哥呀幻想哥   有一位屌丝男,从小抱着报效祖国的理想上了大学,毕业后干了 IT 行业,高中那时候看文汇报说,搞 IT 的在上

    屌丝职场记 投递人 itwriter 发布于 2013-05-27 09:21 评论(18) 有3402人阅读  原文链接  [收藏]  « » 作者@幻想哥呀幻想哥 有一位屌丝男,从小抱着报效祖国的 ...

  4. php后台的在控制器中就可以实现阅读数增加

    $smodel=M('Sswz');$smodel->where($map)->setInc('view' ,1);php后台的在控制器中就可以实现阅读数增加前台不需要传值

  5. 使用 Redis 进行阅读数统计并定时持久化

    之前,统计每篇博文的阅读数的方式是经过筛选去重之后直接更新数据库,并发压力直接传导到数据库,假设1秒有1000个并发请求,传统方案会在1秒内并发进行1000次数据库更新操作. 为了降低数据库的并发压力 ...

  6. 21 ~ express ~ 前台内容分类展示

    一,前台 , views/main/index.html ,通过get传送给后台 思路 : 将栏目ID 传递给后台,后台根据 栏目的ID 返回相应的数据   {% if category == '' ...

  7. 20 ~ express ~ 前台内容分页展示

    一,后台路由文件 /router/main.js var express = require('express') var router = express.Router() var Category ...

  8. express-21 静态内容

    静态内容是指应用程序不会基于每个请求而去改变的资源. 多媒体: 图片.视频和音频文件 CSS: JavaScript 二进制下载文件: 这包含所有种类:PDF.压缩文件.安装文件等类似的东西. 借助一 ...

  9. express + jqPaginator 分页展示内容

    写在前面的话 分页展示内容也是我们在页面开发中经常会遇到的需求 前端页面利用jqPaginator这个jquery插件来编写 后端利用mysql存储数据 开始敲代码 回顾sql知识 首先让我们回顾一下 ...

随机推荐

  1. 前端学习笔记系列一:2 Vue的单文件组件

    (1)非单文件vue组件和单文件vue组件的一般写法 一个完整的vue组件会包括三个部分:一是template模板部分,二是js程序逻辑部分,三是css样式部分.每个组件都有属于自己的模板,js和样式 ...

  2. 使用 MYSQLBINLOG 来恢复数据

    使用 MYSQLBINLOG 来恢复数据 2009-04-05 12:47:05 标签:mysql mysqlbinlog 恢复 数据库 数据 原创作品,允许转载,转载时请务必以超链接形式标明文章 原 ...

  3. ssm框架前后端数据交互完整示例

    1.sprinMvc控制层 package com.dengfeng.house.controller; import java.text.ParseException; import java.ut ...

  4. Python测试进阶——(4)Python程序监控、存储、分析并可视化CPU和内存利用率

    monitor190617.py 监控cpu和内存利用率信息,组织成json格式,并写入到 record.txt 文件中: import psutil import time import json ...

  5. vscode dart 插件 关闭自动注释

    vscode dart 插件 关闭自动注释 左下角设置 --> 搜索 Closing Labels --> 去掉勾选

  6. maven加载ojdbc14报错

    问题复现步骤: 1.在pom.xml里面添加ojdbc14的依赖,代码如下: <dependency> <groupId>com.oracle</groupId> ...

  7. 014.Delphi插件之QPlugins,MDI窗口

    不知道为什么,这个DEMO编译出来报错,运行不了,在QDAC群里问了一下也没人响应. 效果如下 主程序代码如下 unit Frm_Main; interface uses Winapi.Windows ...

  8. oracle进入CDB

    第一步:使用sys登陆 CONN sys/change_on_install AS SYSDBA; 第二步:查看现在的容器名称 SHOW con_name; 第三步:改变容器为PDB ALTER SE ...

  9. hadoop 配置问题以及HDFS下如何读写文件

    辛辛苦苦学两年 ,一举回到解放前!!! 大数据开始学真的头疼 关键是linux你玩的不6 唉难受 hadoop 配置参见博客 http://dblab.xmu.edu.cn/blog/install- ...

  10. 《YouTube 网站的架构演进》阅读笔记

    概述 YouTube 在国内是个404网站,需要翻墙得见,这是有用的废话,先铺垫一下. 从全球网站来看,它仅次于母公司 Google,全球排名位列第2.每天超过5亿以上视频播放量,平均每个用户点击10 ...