nodejs--express开发博客系统
[html]
<a href="/<%= post.user %>/<%= post.time.day%>/<%= post.title %>"><%= post.title %></a>
根据这个链接地址,进入文章页面的路由控制就可以写成这样:
[javascript]
app.get('/:user/:time/:title', function(req,res){
User.get(req.params.user,function(err, user){
Post.getOne(req.params.user, req.params.time, req.params.title, function(err, post){//还记得post.js里面获取文章的函数吧?
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()
});
});
});
});
接下来写文章页面的视图 article.ejs
[html
<%- include header %>
<p><h2><a href="/<%= locals.post.user %>/<%= locals.post.time.day %>/<%= locals.post.title %>"><%= locals.post.title %></a></h2></p>
<p class="info">
作者:<a href="/<%= locals.post.user %>"><%= locals.post.user %></a> |
日期:<%= locals.post.time.minute %>
</p>
<p><%- locals.post.post %></p>
<p class="info">阅读:<%= locals.post.pv %> | 评论:<%= locals.post.comments.length %>
<%- include footer %>
进入主页点击文章标题看看效果吧?
发现问题了吧?样式都没有了,原因先不说,说完解决方法之后你就明白了:
把header.ejs中引入style.css的路径写成这样:
[html]
<link rel="stylesheet" href="/stylesheets/style.css">
好了,ok了!
现在在文章页面后面加上评论,完整的article.ejs为:
[html]
<%- include header %>
<p><h2><a href="/<%= locals.post.user %>/<%= locals.post.time.day %>/<%= locals.post.title %>"><%= locals.post.title %></a></h2></p>
<p class="info">
作者:<a href="/<%= locals.post.user %>"><%= locals.post.user %></a> |
日期:<%= locals.post.time.minute %>
</p>
<p><%- locals.post.post %></p>
<p class="info">阅读:<%= locals.post.pv %> | 评论:<%= locals.post.comments.length %>
<br /><br />
<% if(locals.post.comments){ %>
<% locals.post.comments.forEach(function(comment, index){ %>
<p><a href="/<%= comment.website %>"><%= comment.name %></a>
<time>回复于 <%= comment.time %></time></p>
<p><%- comment.content %></p>
<% }) %>
<% } %>
<form method="post">
<% if(!locals.user){ %>
姓名:<input type="text" name="name" /><br />
邮箱:<input type="text" name="email" /><br />
网址:<input type="text" name="website" /><br />
<% } %>
留言:<br /><textarea name="content" rows="5" cols="80"></textarea>
<br /><input type="submit" value="留言" />
</form>
<%- include footer %>
评论视图有了,下面就是处理过程了,在app.get("/:user/:time/:title",function(){})后面添加:
[javascript]
app.post('/:user/:time/:title', function(req,res){
var comment = null,
date = new Date(),
time = date.getFullYear() + "-" + (date.getMonth()+1) + "-" + date.getDate() + " " + date.getHours() + ":" + date.getMinutes();
if(req.session.user){
var name=req.session.user.name;
comment = {"name":name, "email":name+"@gmail.com", "website":"www."+name+".com", "time":time, "content":req.body.content}
} else {
comment = {"name":req.body.name, "email":req.body.email, "website":req.body.website, "time":time, "content":req.body.content}
}
var oneComment = new Comment(req.params.user, req.params.time, req.params.title, comment);
oneComment.save(function(err){
if(err){
req.flash('error', err);
return res.redirect('/');
}
req.flash('success', '评论成功!');
res.redirect('back');//这句话的作用是评论成功后返回到被评论文章
});
});
作者页面和文章页面是类似的,点击作者名字,显示该作者的所有文章。
作者页面路由控制:
[javascript]
app.get('/:user', function(req,res){
User.get(req.params.user, function(err, user){
if(!user){
return res.redirect('/');
}
补充:web前端 , JavaScript ,
- 更多JS疑问解答:
- 几个验证11位手机号码格式的js代码
- js把图片转换成 base64代码
- js把base代码转换成图片
- JS 将 base64编码的图片转化为图片文件
- js中的定时器
- js如何获得FCKeditor控件的值
- 用js限制投票的cookie .目前设置的为:<input type="" class="" onclick="'window.location...
- JS验证,这块“牛皮”反复修改都不能实现
- 在JS中使用DOM模型
- 如何用JS 获取本地文件夹的文件列表
- js中new 了两个Object数组。怎么样将数组内容合并,重复的内容?
- 求实现自动生成图片缩略图的JS代码
- JS脚本网页问题
- js,代码中"object"和"Object"区别?
- js+flash实现网页图片切换效果,出现边框,单击激活此控件。