Node.js 博客實例(十)pv統(tǒng)計和留言統(tǒng)計
來源:程序員人生 發(fā)布時間:2014-09-09 03:50:30 閱讀次數(shù):2258次
原教程
https://github.com/nswbmw/N-blog/wiki/_pages的第十章,由于版本等的原因,在原教程基礎(chǔ)上稍加改動即可實現(xiàn)。
post.js中將var post={...}修改為(每次改動此處之后都要將e:/mongodb/blog/清空):
//要存入數(shù)據(jù)庫的文檔
var post = {
name: this.name,
time: time,
title: this.title,
post: this.post,
tags:this.tags,
comments:[],
pv:0
};
我們給要存儲的文檔添加了 pv 鍵并直接賦初值為 0。
繼續(xù)將post.js中的Post.getOne()修改為:
//獲取一篇文章
Post.getOne = function(name, day, title, callback) {
//打開數(shù)據(jù)庫
mongodb.open(function (err, db) {
if (err) {
return callback(err);
}
//讀取 posts 集合
db.collection('posts', function (err, collection) {
if (err) {
mongodb.close();
return callback(err);
}
//根據(jù)用戶名、發(fā)表日期及文章名進行查詢
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()會執(zhí)行,兩個異步同時執(zhí)行就會出錯;。
修改 index.ejs 、user.ejs 及 article.ejs ,在:<p><%- post.post %></p>下一行添加一行代碼:
<p class="info">閱讀:<%= post.pv %> | 評論:<%= post.comments.length %></p>
至此,文章就有了閱讀次數(shù)和評論次數(shù)的展示:

生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學習有所幫助,可以手機掃描二維碼進行捐贈