Node.js 博客实例(五)编辑与删除功能
来源:互联网 发布:搜客网络 编辑:程序博客网 时间:2024/06/05 04:56
原教程 https://github.com/nswbmw/N-blog/wiki/_pages的第五章,由于版本等的原因,在原教程基础上稍加改动即可实现。
现在给博客添加编辑文章与删除文章的功能。
当一个用户在线时,只允许他在自己发表的文章页进行编辑或删除,编辑时,只能编辑文章内容,不能编辑文章标题。
在style.css ,添加如下样式:
.edit{margin:3px;padding:2px 5px;border-radius:3px;background-color:#f3f3f3;color:#333;font-size:13px;}.edit:hover{text-decoration:none;background-color:#f00;color:#fff;-webkit-transition:color .2s linear;}
通过检测 session 中的用户名是否存在,若存在且和当前文章页面的作者名相同,则显示编辑和删除按钮,否则不显示:
<%- include header %><p> <% if (user && (user.name == post.name)) { %> <span><a class="edit" href="/edit/<%= post.name %>/<%= post.time.day %>/<%= post.title %>">编辑</a></span> <span><a class="edit" href="/remove/<%= post.name %>/<%= post.time.day %>/<%= post.title %>">删除</a></span><% } %></p><p class="info"> 作者:<a href="/u/<%= post.name %>"><%= post.name %></a> | 日期:<%= post.time.minute %></p><p><%- post.post %></p><%- include footer %>post.js ,添加如下代码:
//返回原始发表的内容(markdown 格式)Post.edit = 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);}callback(null, doc);//返回查询的一篇文章(markdown 格式)});}); });};//更新一篇文章及其相关信息Post.update = function(name, day, title, post, 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.update({"name": name,"time.day": day,"title": title}, {$set: {post: post}}, function (err) {mongodb.close();if (err) {return callback(err);}callback(null);});});});};//删除一篇文章Post.remove = 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.remove({"name": name,"time.day": day,"title": title}, {w: 1}, function (err) {mongodb.close();if (err) {return callback(err);}callback(null);});});});};index.js ,添加如下代码:
<span style="white-space:pre"></span>app.get('/edit/:name/:day/:title', checkLogin);app.get('/edit/:name/:day/:title', function (req, res) {var currentUser = req.session.user;Post.edit(currentUser.name, req.params.day, req.params.title, function (err, post) {if (err) {req.flash('error', err); return res.redirect('back');}res.render('edit', {title: '编辑',post: post,user: req.session.user,success: req.flash('success').toString(),error: req.flash('error').toString()});});});app.post('/edit/:name/:day/:title', checkLogin);app.post('/edit/:name/:day/:title', function (req, res) {var currentUser = req.session.user;Post.update(currentUser.name, req.params.day, req.params.title, req.body.post, function (err) {var url = '/u/' + req.params.name + '/' + req.params.day + '/' + req.params.title;if (err) {req.flash('error', err); return res.redirect(url);//出错!返回文章页}req.flash('success', '修改成功!');res.redirect(url);//成功!返回文章页});});app.get('/remove/:name/:day/:title', checkLogin);app.get('/remove/:name/:day/:title', function (req, res) {var currentUser = req.session.user;Post.remove(currentUser.name, req.params.day, req.params.title, function (err) {if (err) {req.flash('error', err); return res.redirect('back');}req.flash('success', '删除成功!');res.redirect('/');});});在 blog/views/下新建 edit.ejs ,添加如下代码:
<%- include header %><form method="post"> 标题:<br /> <input type="text" name="title" value="<%= post.title %>" disabled="disabled" /><br /> 正文:<br /> <textarea name="post" rows="20" cols="100"><%= post.post %></textarea><br /> <input type="submit" value="保存修改" /></form><%- include footer %>完工!试一下效果,先登录,再测试编辑和删除操作:
点击进入文章可看到编辑和删除按钮,前提是已登录
点击编辑,并进行编辑
保存修改
删除操作这里不做演示。
1 0
- Node.js 博客实例(五)编辑与删除功能
- Node.js 博客实例(三)增加文件上传功能
- Node.js 博客实例(六)留言功能
- Node.js 博客实例(七)分页功能
- Node.js 博客实例(十一)文章检索功能
- Node.js 博客实例(十二)友情链接功能
- Node.js 博客实例(十六)日志功能
- Node.js 博客实例(十七)小结
- Node.js 博客实例(十五)转载和转载统计功能
- Node.js 博客实例(一)简单博客
- Node.js 博客实例(二)使用 Markdown
- Node.js 博客实例(八)增加存档页面
- Node.js 博客实例(九)标签和标签页面
- Node.js 博客实例(十三)增加404页面
- Node.js 博客实例(十四)增加头像
- Node.js 博客实例(补充一)使用KindEditor
- jquery.datatables.js表格编辑与删除
- node.js使用(五):网站访问、搭建服务器及留言功能的实现
- Jquery实例-图片轮播
- 图像的傅里叶变换,二维傅里叶变换的物理意义
- 【Android界面实现】关于自定义Dialog的那些事
- C++获取文件长度
- 星星流浪的城市
- Node.js 博客实例(五)编辑与删除功能
- 《近匠》RealSense:几行代码,为游戏添增实感交互
- 【转】给定一个函数rand5(),使函数rand7()可以随机等概率的生成1-7的整数
- HDU3199 Hamming Problem 【数论】
- 链表的建立及反转
- 随机化一维数组
- PHP foreach中的引用(&)
- frame,bounds的区别
- 韩国PAYWAVE认证之技术篇