Node.js 博客实例(十)pv统计和留言统计
原教程 https://github.com/nswbmw/N-blog/wiki/_pages的第十章,因为版本号等的原因,在原教程基础上稍加修改就可以实现。
post.js中将var post={...}修改为(每次修改此处之后都要将e:/mongodb/blog/清空):
//要存入数据库的文档
var post = {
name: this.name,
time: time,
title: this.title,
post: this.post,
tags:this.tags,
comments:[],
pv:0
};
我们给要存储的文档加入了 pv 键并直接赋初值为 0。
继续将post.js中的Post.getOne()改动为:
//获取一篇文章
Post.getOne = function(name, day, title, callback) {
//打开数据库
mongodb.open(function (err, db) {
if (err) {
return callback(err);
}
//读取 posts 集合
db.collection('posts', function (err, collection) {
if (err) {
mongodb.close();
return callback(err);
}
//依据username、发表日期及文章名进行查询
collection.findOne({
"name": name,
"time.day": day,
"title": title
}, function (err, doc) { if (err) {
mongodb.close();
return callback(err);
}
//解析 markdown 为 html
if (doc) {
collection.update({
"name":name,
"time.day":day,
"title":title
},{$inc:{"pv":1}
},function(err){
mongodb.close();
if(err)
return callback(err);
}
);
doc.post=markdown.toHTML(doc.post);
doc.comments.forEach(function (comment) {
comment.content = markdown.toHTML(comment.content);
});
}
callback(null, doc);//返回查询的一篇文章
});
});
});
};
这里注意:collection.findOne({
"name": name,
"time.day": day,
"title": title
}, function (err, doc) {
if (err) {
mongodb.close();
return callback(err);
}
这里mongodb.close();一定要放到if里面。否则会报错:
throw new Error('Can\'t set headers after they are sent.');
Error: Can't set headers after they are sent.
原因是NODEJS异步机制,以下另一个mongodb.close()会运行。两个异步同一时候运行就会出错;。
改动 index.ejs 、user.ejs 及 article.ejs ,在:<p><%- post.post %></p>下一行加入一行代码:
<p class="info">阅读:<%= post.pv %> | 评论:<%= post.comments.length %></p>
至此,文章就有了阅读次数和评论次数的展示:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZG9uZ3NoYW9zaHVhaQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
Node.js 博客实例(十)pv统计和留言统计的更多相关文章
- Node.js 博客实例(六)留言功能
原教程https://github.com/nswbmw/N-blog/wiki/_pages的第六章,因为版本号等的原因,在原教程基础上稍加修改就可以实现. 实现用户给文章留言的功能,留言保存在数据 ...
- Node.js 博客实例(一)简单博客
原教程 https://github.com/nswbmw/N-blog/wiki/_pages的第一章.因为版本号等的原因,在原教程基础上稍加修改就可以实现. 环境: win7旗舰版64位 Node ...
- Node.js 博客实例(五)编辑与删除功能
原教程 https://github.com/nswbmw/N-blog/wiki/_pages的第五章,因为版本号等的原因,在原教程基础上稍加修改就可以实现. 如今给博客加入编辑文章与删除文章的功能 ...
- Node.js 博客实例(三)添加文件上传功能
原教程 https://github.com/nswbmw/N-blog/wiki/_pages的第三章 上传文件眼下有三种方法: 使用 Express 自带的文件上传功能,不涉及数据库 使用 For ...
- Node.js博客搭建
Node.js 博客搭建 一. 学习需求 Node 的安装运行 会安装node,搭建node环境 会运行node. 基础模块的使用 Buffer:二进制数据处理模块 Event:事件模块 fs:文件系 ...
- Hexo - 快速,轻量,强大的 Node.js 博客框架
Hexo 是一个快速,轻量,强大的 Node.js 博客框架.带给你难以置信的编译速度,瞬间生成静态文件:支持 Markdown,甚至可以在 Hexo 中集合 Octopress 插件:只需要一个命令 ...
- Node.js 博客搭建
Node.js 博客搭建:https://www.linuxidc.com/Linux/2017-02/140115.htm https://www.cnblogs.com/mrcln/p/93087 ...
- node.js博客GitHub搭建(hexo)
教程参考官网提供的: https://hexo.io/zh-cn/ 教程: https://hexo.io/zh-cn/docs/ 我的node.js环境: hexo博客全程采用markdown进行编 ...
- Django 系列博客(十六)
Django 系列博客(十六) 前言 本篇博客介绍 Django 的 forms 组件. 基本属性介绍 创建 forms 类时,主要涉及到字段和插件,字段用于对用户请求数据的验证,插件用于自动生成 h ...
随机推荐
- W10子系统UBantu命令安装Redis及其启动
W10子系统UBantu命令安装Redis及其启动 打开W10子系统UBantu 安装Redis $sudo apt-get install redis-server 启动Redis redis-se ...
- strlen()函数对一个未初始化数组的处理
今天使用strlen时 ,发现一个问题,demo代码如下: #include <stdio.h> #include <stdlib.h> #include <string ...
- async、await 优缺点
async.await 优缺点 async 和 await 相比直接使用 Promise 来说,优势在于处理 then 的调用链,能够更清晰准确的写出代码.缺点在于滥用 await 可能会导致性能问题 ...
- javaScript将string转换成array,并将汉字按汉语拼音排序方法
亲测,代码如下: var str = '中华人民共和国民主富强': var arr = str.split("");//字符串装换数组方法一 //arr = str.replace ...
- 随心所欲生成git仓库随意一段commit的专用patch应用小实践
随心所欲生成git仓库随意一段commit的专用patch应用小实践 我们在开发中.时不时的可能要去做一个patch给你的下线,或者你的合作者.在git管理中,我们知道有git format-pat ...
- poj3249 Test for job 【图的DAG dp】
#include <cstdio> #include <cstdlib> #include <iostream> #include <algorithm> ...
- 一个build.xml实例
<?xml version="1.0"?> <project name="ssh" basedir="." default ...
- 1.future线程通信
#include <future> #include<iostream> #include <thread> #include <thread> #in ...
- Intellij IDEA安装与使用,完整详细。
https://blog.csdn.net/qq_41879385/article/details/81952656 https://www.jetbrains.com/idea/download/# ...
- oracle11g-rac安装部署
网上11g rac安装文档大多不详细,今天来一个详细的! 纯操作文档,不喜勿喷!! 环境: 系统:rhel5.5 oracle:11.2.03 双网卡 共享磁盘 ip地址和主机名规划: #节点1 主机 ...