Node.js 博客实例(十)pv统计和留言统计
2014-08-28 14:30
501 查看
原教程 https://github.com/nswbmw/N-blog/wiki/_pages的第十章,由于版本等的原因,在原教程基础上稍加改动即可实现。
post.js中将var post={...}修改为(每次改动此处之后都要将e:/mongodb/blog/清空):
继续将post.js中的Post.getOne()修改为:
"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>下一行添加一行代码:
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); } //根据用户名、发表日期及文章名进行查询 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>至此,文章就有了阅读次数和评论次数的展示:
相关文章推荐
- Node.js 博客实例(十五)转载和转载统计功能
- Node.js 博客实例(四)实现用户页面和文章页面
- Node.js 博客实例(九)标签和标签页面
- Node.js 博客实例(三)添加文件上传功能
- Node.js 博客实例(五)编辑与删除功能
- Node.js 博客实例(补充一)使用KindEditor
- Node.js 博客实例(一)简单博客
- Node.js 博客实例(六)留言功能
- Node.js 博客实例(七)分页功能
- Node.js 博客实例(十六)日志功能
- Node.js 博客实例(十二)友情链接功能
- Node.js+jade抓取博客所有文章生成静态html文件的实例
- Node.js 博客实例(二)使用 Markdown
- Node.js 博客实例(八)增加存档页面
- Node.js 博客实例(十四)增加头像
- node.js+express+ejs+MongoDB模板修改写《node.js开发指南》中的博客网站实例
- Node.js 博客实例(五)编辑与删除功能
- Node.js 博客实例(十三)增加404页面
- Node.js 博客实例(十一)文章检索功能
- Node.js 博客实例(六)留言功能