一个简单的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> 发布于: <%= 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> 发布于: <%= post.time.minute %><span class='glyphicon glyphicon-comment' style="padding:0 10px;">评论(0)</span><span class="glyphicon glyphicon-share-alt">阅读(0)</span></p> </div>
至此,用户页面和文章页面的相应功能已经实现。
转载于:https://www.cnblogs.com/yuity/p/5299455.html
一个简单的blog系统(四) 实现用户页面和文章页面相关推荐
- 一个简单的blog系统(九) 增加标签和标签页面
一个简单的blog系统(九) 增加标签和标签页面 1.现在,我们来给博客添加标签和标签页面. 假定每篇文章最多只有两个标签,当单机主页左侧标签页链接的时候,跳转到标签页并且列出所有已经有的标签,当单击 ...
- 一个简单的blog系统(十一) 增加文章检索功能
一个简单的blog系统(十一) 增加文章检索功能 1. 现在,我们就来给博客添加文章检索功能.假定,可以根据关键字魔木查询文章标题,也就是说支持正则表达式,而且字母不会区分大小写. 1.1 首先,我们 ...
- 一个简单的blog系统(十二) 增加友情链接页面
一个简单的blog系统(十二) 增加友情链接页面 1.首先,我们打开header.ejs,在其中添加一行代码,并作出响应修改: <li><a href="/links&qu ...
- 使用uliweb创建一个简单的blog
1.创建数据库 uliweb的数据库都在models.py文件里面,因此先创建该文件 vim apps/blog/models.py 添加如下两行: #coding=utf-8 from uliweb ...
- 基于C#中的Trace实现一个简单的日志系统
最近在做的项目进入中期阶段,因为在基本框架结构确定以后,现阶段工作重心开始转变为具体业务逻辑的实现,在这个过程中我认为主要有两点,即保证逻辑代码的正确性和容错性.确定需求文档中隐性需求和逻辑缺陷. ...
- 一个简单的CS系统打包过程图文版
一个简单的CS系统打包过程图文版 1. 打包内容 1.1. 此次打包的要求和特点 主工程是一个CS系统: 此CS系统运行的先决条件是要有.Net Framework 3.5: 主工程安装完成 ...
- c语言编写一个简单的答题系统
利用c语言编写一个简单的答题系统. 思路是先设计好题目和答案,再输入自己的答案,利用输入的答案与正确答案对比,从而得出你回答的对错. (一)捆绑题目和答案 我们可以利用结构体对一个题目捆绑上一个答案. ...
- 在kaldi工具包使用小数字语料库创建一个简单的ASR系统(番外篇)
相信很多人已经看过kaldi英文官网上关于该系统的搭建流程.虽然官方已经写的很通俗易懂,但是第一次接触的话还是不可避免的会碰到许多坑.恰巧最近实践了一下,把整个实践过程写了下来.一是方便自己后续回顾本 ...
- 实现一个简单的栅格系统
实现一个简单的栅格系统 关于栅格系统 相信大家都用过 Bootstrap (神马!你没用过?这么流行你还不快去试试),栅格系统就是 Bootstrap 的核心,现在许多 UI 库中也增加了对栅格系统的 ...
最新文章
- 第五周项目一-三角形类雏形(1)
- Java Vector与ArrayList的区别
- BZOJ 4242 水壶(BFS建图+最小生成树+树上倍增)
- Java多线程学习笔记-线程的状态
- vc运行库各版本下载
- worldpress自定义页面
- 超炫酷html+css+javascript实现登录模板
- expr4j 表达式计算
- windows7在安装vc14的时候报错(0x80240017)
- 猿如意|程序员的如意神器之【chat GPT】测评。
- 单片机与ARM嵌入式区别
- 301重定向解决域名被墙教程
- ELSA为其英语发音助理筹集320万美元pre-A轮融资
- 新视野大学英语第三版第四册读写教程第二单元-真正的美
- 在vmware上安装ubuntu 14.04(64位)
- 伤口清创术行业调研报告 - 市场现状分析与发展前景预测
- Vue基础进阶全套视频教程
- 利用ajax下载文件失败
- windows远程桌面不能粘贴复制本地大文件解决办法
- linux下载软件后报错,LINUX下安装软件包出错 何解
热门文章
- 【枭·音频】声随意动——浅谈《暗影火炬城》声音设计
- 主创仅2人,题材是大型3D战争,这款游戏竟然“超逼真”?
- 暴雪应该从《争霸艾泽拉斯》中吸取什么教训?
- 利用文件摘要简化游戏资源的引用管理
- 浅谈街霸的帧数据 (一):frame data
- JavaWeb课程复习资料——用于突击考试总结
- 我的Go+语言初体验——【一、go+环境WIN10_100%成功安装(附-视频)】
- mongodb 对内存的严重占用以及解决方法
- mysql 5.0存储过程学习总结
- SQL之inner join/left join/right join