一个简单的blog系统(四) 实现用户页面和文章页面

1.现在我们来给博客添加用户页面和文章页面。

  1.1 所谓用户页面就是当单击某个用户名链接时,跳转到:域名/u/用户名,并且跳出该用户的所有文章。同样,文章页面就是当单击某篇文章标题时,跳转到:域名/u/用户名/事件/文件名,进入到该文章的页面(也许还有该文章的评论等)

  首先,我们先打开post.js,将Post.get修改为Post.getAll, 同时将index.js中的Post.get修改为Post.getAll。在post.js最后添加如下代码:

 1 //获取一篇文章,根据用户名,发表日期以及文章名精确获取一篇文章
 2 Post.getOne = function(name, day, title, callback) {
 3       //打开数据库
 4       mongodb.open(function (err, db) {
 5         if (err) {
 6           return callback(err);
 7         }
 8         //读取 posts 集合
 9         db.collection('posts', function (err, collection) {
10               if (err) {
11                 mongodb.close();
12                 return callback(err);
13               }
14           //根据用户名、发表日期及文章名进行查询
15               collection.findOne({
16                 "name": name,
17                 "time.day": day,
18                 "title": title
19               }, function (err, doc) {
20                 mongodb.close();
21                 if (err) {
22                   return callback(err);
23                 }
24                 //解析 markdown 为 html
25                 doc.post = markdown.toHTML(doc.post);
26                 callback(null, doc);//返回查询的一篇文章
27               });
28         });
29       });
30 };

  然后,我们来实现用户页面和文章页面,打开index.js,在app.post('/upload')后添加如下代码:

//用户页面路由
router.get('/u/:name', function(req, res) {//检查用户是否存在User.get(req.params.name, function(err, user) {if(!user) {req.flash('error', '用户不存在!');return res.redirect('/');    //用户不存在则跳转到主页
        }//查询并返回该用户的所有文章Post.getAll(user.name, function(err, posts) {if(err) {req.flash('error', err);return res.redirect('/');}res.render('user', {title: user.name,posts: posts,user: req.session.user,success: req.flash('success').toString(),error: req.flash('error').toString()});});});
});//文章页面路由
router.get('/u/:name/:day/:title', function(req, res) {Post.getOne(req.params.name, req.params.day, req.params.title, function(err, post) {if(err) {req.flash('error', err);return res.redirect('/');}res.render('article', {title: req.params.title,post: post,user: req.session.user,success: req.flash('success').toString(),error: req.flash('error').toString()});});
});

  最后,我们创建用户页面和文章页面的模板文件:在views文件夹下面新建user.ejs,添加如下代码,同时将index.ejs也做出相应的修改:

<!-- 发表的文章内容 --><div class="list-group"><%  posts.forEach(function(post, index) { %> <div class="list-group-item"><h4><a href="/u/<%= post.name %>/<%= post.time.day %>/<%= post.title %>"><%= post.title %></a></h4><p class="list-group-item-text" style="padding: 10px 0;"><%- post.post %></p><p class="info"><a href="/u/<%= post.name %>"><%= post.name %></a>&nbsp;&nbsp;发布于:&nbsp;&nbsp;<%= post.time.minute %><span class='glyphicon glyphicon-comment' style="padding:0 10px;">评论(0)</span><span class="glyphicon glyphicon-share-alt">阅读(0)</span></p></div><% }); %>

  在views文件夹下新建 article.ejs ,添加如下代码:

<div class='container'><p class="list-group-item-text" style="padding: 10px 0;"><%- post.post %></p><p class="info"><a href="/u/<%= post.name %>"><%= post.name %></a>&nbsp;&nbsp;发布于:&nbsp;&nbsp;<%= post.time.minute %><span class='glyphicon glyphicon-comment' style="padding:0 10px;">评论(0)</span><span class="glyphicon glyphicon-share-alt">阅读(0)</span></p>
</div>

至此,用户页面和文章页面的相应功能已经实现。

posted on 2016-03-20 20:15 Yuity 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/yuity/p/5299455.html

一个简单的blog系统(四) 实现用户页面和文章页面相关推荐

  1. 一个简单的blog系统(九) 增加标签和标签页面

    一个简单的blog系统(九) 增加标签和标签页面 1.现在,我们来给博客添加标签和标签页面. 假定每篇文章最多只有两个标签,当单机主页左侧标签页链接的时候,跳转到标签页并且列出所有已经有的标签,当单击 ...

  2. 一个简单的blog系统(十一) 增加文章检索功能

    一个简单的blog系统(十一) 增加文章检索功能 1. 现在,我们就来给博客添加文章检索功能.假定,可以根据关键字魔木查询文章标题,也就是说支持正则表达式,而且字母不会区分大小写. 1.1 首先,我们 ...

  3. 一个简单的blog系统(十二) 增加友情链接页面

    一个简单的blog系统(十二) 增加友情链接页面 1.首先,我们打开header.ejs,在其中添加一行代码,并作出响应修改: <li><a href="/links&qu ...

  4. 使用uliweb创建一个简单的blog

    1.创建数据库 uliweb的数据库都在models.py文件里面,因此先创建该文件 vim apps/blog/models.py 添加如下两行: #coding=utf-8 from uliweb ...

  5. 基于C#中的Trace实现一个简单的日志系统

      最近在做的项目进入中期阶段,因为在基本框架结构确定以后,现阶段工作重心开始转变为具体业务逻辑的实现,在这个过程中我认为主要有两点,即保证逻辑代码的正确性和容错性.确定需求文档中隐性需求和逻辑缺陷. ...

  6. 一个简单的CS系统打包过程图文版

    一个简单的CS系统打包过程图文版 1.     打包内容 1.1.  此次打包的要求和特点 主工程是一个CS系统: 此CS系统运行的先决条件是要有.Net Framework 3.5: 主工程安装完成 ...

  7. c语言编写一个简单的答题系统

    利用c语言编写一个简单的答题系统. 思路是先设计好题目和答案,再输入自己的答案,利用输入的答案与正确答案对比,从而得出你回答的对错. (一)捆绑题目和答案 我们可以利用结构体对一个题目捆绑上一个答案. ...

  8. 在kaldi工具包使用小数字语料库创建一个简单的ASR系统(番外篇)

    相信很多人已经看过kaldi英文官网上关于该系统的搭建流程.虽然官方已经写的很通俗易懂,但是第一次接触的话还是不可避免的会碰到许多坑.恰巧最近实践了一下,把整个实践过程写了下来.一是方便自己后续回顾本 ...

  9. 实现一个简单的栅格系统

    实现一个简单的栅格系统 关于栅格系统 相信大家都用过 Bootstrap (神马!你没用过?这么流行你还不快去试试),栅格系统就是 Bootstrap 的核心,现在许多 UI 库中也增加了对栅格系统的 ...

最新文章

  1. 第五周项目一-三角形类雏形(1)
  2. Java Vector与ArrayList的区别
  3. BZOJ 4242 水壶(BFS建图+最小生成树+树上倍增)
  4. Java多线程学习笔记-线程的状态
  5. vc运行库各版本下载
  6. worldpress自定义页面
  7. 超炫酷html+css+javascript实现登录模板
  8. expr4j 表达式计算
  9. windows7在安装vc14的时候报错(0x80240017)
  10. 猿如意|程序员的如意神器之【chat GPT】测评。
  11. 单片机与ARM嵌入式区别
  12. 301重定向解决域名被墙教程
  13. ELSA为其英语发音助理筹集320万美元pre-A轮融资
  14. 新视野大学英语第三版第四册读写教程第二单元-真正的美
  15. 在vmware上安装ubuntu 14.04(64位)
  16. 伤口清创术行业调研报告 - 市场现状分析与发展前景预测
  17. Vue基础进阶全套视频教程
  18. 利用ajax下载文件失败
  19. windows远程桌面不能粘贴复制本地大文件解决办法
  20. linux下载软件后报错,LINUX下安装软件包出错 何解

热门文章

  1. 【枭·音频】声随意动——浅谈《暗影火炬城》声音设计
  2. 主创仅2人,题材是大型3D战争,这款游戏竟然“超逼真”?
  3. 暴雪应该从《争霸艾泽拉斯》中吸取什么教训?
  4. 利用文件摘要简化游戏资源的引用管理
  5. 浅谈街霸的帧数据 (一):frame data
  6. JavaWeb课程复习资料——用于突击考试总结
  7. 我的Go+语言初体验——【一、go+环境WIN10_100%成功安装(附-视频)】
  8. mongodb 对内存的严重占用以及解决方法
  9. mysql 5.0存储过程学习总结
  10. SQL之inner join/left join/right join