nodejs实战express笔记之实现用户和文章页面
来源:互联网 发布:淘宝客转链接软件 编辑:程序博客网 时间:2024/06/03 17:43
本笔记所有文章均算是仿照赵坤的node.js实战一书,记录学习过程
概念
- 用户页面:单击某个用户链接名,跳转到:
域名/u/用户
,并列出该用户的所有文章 文章页面:同理,某个文章的页面
当访问这些页面的时候,会从路径中提取用户名,时间,标题等查询数据库并返回查询的文章信息,然后渲染文章页模板(article.ejs)生成页面显示给用户。
因此,整体步骤如下,
- 修改数据库函数,便于获取文章信息
- 创建新的用户和文章路由规则
- 建立用户和文章ejs模板
修改post.js的数据库获取函数
- Post.get改为Post.getAll,同时把调用该函数的其它文件也相应改名,如index.js中的
- 新建Post.getOne()函数
//获取一篇文章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); } //解析markdown doc.post= markdown.toHTML(doc.post); callback(null,doc); }); }); });};
添加用户页面的路由规则
在app.post('/upload')
后添加如下代码
//用户页路由 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('err',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('err',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() }); }); });
新建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.title %></a> 日期:<%= post.time.minute %> </p> <p><%- post.post %></p> //首页中可以把这个删掉 <% }) %><%- include footer %>
新建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 %>
小结
至此,实现用户和文章页面功能完成,中间因为敲错字母,出了不少岔子。以后注意
比如:
- Post.getOne()函数在调用时没注意,写成了,getone()
error:req.flash('error').toString()
的toString()
敲成了toSring()
找了好久才找的,要注意。
0 0
- nodejs实战express笔记之实现用户和文章页面
- nodejs实战express笔记之增加编辑与删除功能
- Nodejs学习笔记之express
- nodejs实战express之使用Markdown
- nodejs 之express 笔记 app.helpers 和 app.locals
- nodejs 之express 笔记 include 代替 partials
- nodejs之Express + Passport实现登陆认证
- 第4章 实现用户页面和文章页面
- Nodejs+express 实战,实现系统监控功能
- nodejs使用express,crypto配合validator实现用户登录逻辑
- NodeJS实战:Express+Mongoose+ejs
- nodejs死亡笔记之cookie和session(宇宙级框架express)
- nodejs之express 从零开始
- nodejs之express 从零开始
- Nodejs express之中间件
- NodeJs之express
- nodejs之express框架
- nodejs入门之Express
- Android数据库高手秘籍
- 【Hibernate集锦】---继承映射之单表继承
- 通过shell脚本删除代码里面定义但未使用的变量
- HDU 4374 F(x) (数位dp)
- Js作用域与作用域链详解
- nodejs实战express笔记之实现用户和文章页面
- 杀死那只creep
- android:descendantFocusability用法简析
- 如何利用Info Path自定义Form表单?
- AngularJS中$http
- iOS Method Swizzling(交换)
- test
- 关于多属性查找问题的sphinx解决方案
- DataUtils