Node.js 博客实例(四)实现用户页面和文章页面_html/css_WEB-ITnose

php中文网
发布: 2016-06-24 11:59:03
原创
1179人浏览过

    原教程 https://github.com/nswbmw/n-blog/wiki/_pages的第四章,由于版本等的原因,在原教程基础上稍加改动即可实现。

现在,我们来给博客添加用户页面和文章页面。
    所谓用户页面就是当点击某个用户名链接时,跳转到:域名/u/用户名 ,并列出该用户的所有文章。
    同理,文章页面就是当点击某篇文章标题时,跳转到:域名/u/用户名/时间/文章名 ,进入到该文章的页面。

post.js:

将 Post.get 修改为 Post.getAll ,同时将 index.js 中 Post.get 修改为 Post.getAll 。在 post.js 最后添加如下代码:

牛面
牛面

牛面AI面试,大厂级面试特训平台

牛面 147
查看详情 牛面

立即学习前端免费学习笔记(深入)”;

//获取一篇文章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) {				mongodb.close();				if (err) {									return callback(err);				}				console.log("333");				console.log(doc);				//解析 markdown 为 html				doc.post = markdown.toHTML(doc.post);				console.log("444");				callback(null, doc);//返回查询的一篇文章				console.log("555");			});		});	});};
登录后复制
Post.getAll :获取一个人的所有文章(传入参数 name)或获取所有人的文章(不传入参数)。
Post.getOne :根据用户名、发表日期及文章名精确获取一篇文章。
index.js :添加如下代码:

立即学习前端免费学习笔记(深入)”;

立即学习前端免费学习笔记(深入)”;

app.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()				});			});		}); 	});		app.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()			});		});	});
登录后复制
在 blog/views/ 文件夹下新建 user.ejs,添加如下代码,同时也将 index.ejs 也修改成如下代码:
<%- include header %><% posts.forEach(function (post, index) { %>  <p><h2><a href="/u/<%= post.name %>/<%= post.time.day %>/<%= post.title %>"><%= post.title %></a></h2></p>  <p class="info">    作者:<a href="/u/<%= post.name %>"><%= post.name %></a> |     日期:<%= post.time.minute %>  </p>  <p><%- post.post %></p><% }) %><%- include footer %>
登录后复制

立即学习前端免费学习笔记(深入)”;

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

立即学习前端免费学习笔记(深入)”;

<%- include header %><p class="info">  作者:<a href="/u/<%= post.name %>"><%= post.name %></a> |   日期:<%= post.time.minute %></p><p><%- post.post %></p><%- include footer %>
登录后复制

立即学习前端免费学习笔记(深入)”;

现在,我们给博客添加了用户页面和文章页面。实现效果:

点击文章标题:


点击作者:


相关标签:
HTML速学教程(入门课程)
HTML速学教程(入门课程)

HTML怎么学习?HTML怎么入门?HTML在哪学?HTML怎么学才快?不用担心,这里为大家提供了HTML速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号