Node.js 博客实例(八)增加存档页面
2014-08-27 20:44
639 查看
原教程 https://github.com/nswbmw/N-blog/wiki/_pages的第八章,由于版本等的原因,在原教程基础上稍加改动即可实现。
给博客增加存档功能,当进入存档页时,按年份和日期的降序列出所有的文章。
首先,我们在主页左侧导航中添加存档页(archive)的链接,修改 header.ejs,在 <span><a title="主页" href="/">home</a></span> 下添加一行代码:
<span><a title="存档" href="/archive">archive</a></span>打开 post.js ,在最后添加以下代码:
app.get('/archive', function (req, res) {
Post.getArchive(function (err, posts) {
if (err) {
req.flash('error', err);
return res.redirect('/');
}
res.render('archive', {
title: '存档',
posts: posts,
user: req.session.user,
success: req.flash('success').toString(),
error: req.flash('error').toString()
});
});
});在 blog/views/ 文件夹下新建 archive.ejs 模版文件,添加如下代码:
但是,
这里如果是同一年则只显示月日:post.time.day,问题在于,初期存入数据库的time.day字段是这样的(post.js中Post.prototype.save()函数里):
var time = {
date: date,
year : date.getFullYear(),
month : date.getFullYear() + "-" + (date.getMonth() + 1),
day : date.getFullYear() + "-" + (date.getMonth() + 1) + "-" + date.getDate(),
minute : date.getFullYear() + "-" + (date.getMonth() + 1) + "-" + date.getDate() + " " +
date.getHours() + ":" + (date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes())
} 可见存储的day字段是“年-月-日”形式的,所以显示出来还是年-月-日。
得个教训,初期的数据结构的设计很重要!
最后,在 style.css 中添加如下样式:
.archive{list-style:none;line-height:28px;}
.archive h3{margin:0.5em 0;}
.archive time{float:left;font-size:14px;color:#999999;margin-right:1.2em;}点击存档,看看效果,显示所有文章列表:
给博客增加存档功能,当进入存档页时,按年份和日期的降序列出所有的文章。
首先,我们在主页左侧导航中添加存档页(archive)的链接,修改 header.ejs,在 <span><a title="主页" href="/">home</a></span> 下添加一行代码:
<span><a title="存档" href="/archive">archive</a></span>打开 post.js ,在最后添加以下代码:
//返回所有文章存档信息 Post.getArchive = function(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); } //返回只包含 name、time、title 属性的文档组成的存档数组 collection.find({}, { "name": 1, "time": 1, "title": 1 }).sort({ time: -1 }).toArray(function (err, docs) { mongodb.close(); if (err) { return callback(err); } callback(null, docs); }); }); }); };index.js 中添加 /archive 的路由规则。打开 index.js ,在 app.get('/u/:name') 前添加以下代码:
app.get('/archive', function (req, res) {
Post.getArchive(function (err, posts) {
if (err) {
req.flash('error', err);
return res.redirect('/');
}
res.render('archive', {
title: '存档',
posts: posts,
user: req.session.user,
success: req.flash('success').toString(),
error: req.flash('error').toString()
});
});
});在 blog/views/ 文件夹下新建 archive.ejs 模版文件,添加如下代码:
<%- include header %> <ul class="archive"> <% var lastYear = 0 %> <% posts.forEach(function (post, index) { %> <% if (lastYear != post.time.year) { %> <li><h3><%= post.time.year %></h3></li> <% lastYear=post.time.year } %> <li><time><%= post.time.day %></time></li> <li><a href="/u/<%= post.name %>/<%= post.time.day %>/<%= post.title %>"><%= post.title %></a></li> <% }) %> </ul> <%- include footer %>这里我们通过在模版中设置一个 lastYear 变量判断是否和上次已经显示的年份相同,相同则不再显示年份,不同则显示。
但是,
这里如果是同一年则只显示月日:post.time.day,问题在于,初期存入数据库的time.day字段是这样的(post.js中Post.prototype.save()函数里):
var time = {
date: date,
year : date.getFullYear(),
month : date.getFullYear() + "-" + (date.getMonth() + 1),
day : date.getFullYear() + "-" + (date.getMonth() + 1) + "-" + date.getDate(),
minute : date.getFullYear() + "-" + (date.getMonth() + 1) + "-" + date.getDate() + " " +
date.getHours() + ":" + (date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes())
} 可见存储的day字段是“年-月-日”形式的,所以显示出来还是年-月-日。
得个教训,初期的数据结构的设计很重要!
最后,在 style.css 中添加如下样式:
.archive{list-style:none;line-height:28px;}
.archive h3{margin:0.5em 0;}
.archive time{float:left;font-size:14px;color:#999999;margin-right:1.2em;}点击存档,看看效果,显示所有文章列表:
相关文章推荐
- Node.js 博客实例(十三)增加404页面
- Node.js 博客实例(十四)增加头像
- Node.js 博客实例(四)实现用户页面和文章页面
- Node.js 博客实例(三)增加文件上传功能
- Node.js 博客实例(九)标签和标签页面
- 用node.js建博客(二) - 构建第一个markdown页面
- JS动态增加页面上的控件实例
- Node.js 博客实例(十一)文章检索功能
- Node.js 博客实例(六)留言功能
- node.js 核心http模块,起一个服务器,返回一个页面的实例
- Node.js 博客实例(补充一)使用KindEditor
- 用node.js建博客(二) - 构建第一个markdown页面
- Node.js 博客实例(十六)日志功能
- node.js+express+ejs+MongoDB模板修改写《node.js开发指南》中的博客网站实例
- Node.js+jade抓取博客所有文章生成静态html文件的实例
- Node.js 博客实例(六)留言功能
- Node.js 博客实例(七)分页功能
- Node.js 博客实例(二)使用 Markdown
- JS动态增加页面上的控件实例
- Node.js 博客实例(十)pv统计和留言统计