首页 > 代码库 > Node.js 博客实例(五)编辑与删除功能
Node.js 博客实例(五)编辑与删除功能
原教程 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=http://www.mamicode.com/"/edit///">编辑> 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=http://www.mamicode.com/"" disabled="disabled" />
>完工!试一下效果,先登录,再测试编辑和删除操作:点击进入文章可看到编辑和删除按钮,前提是已登录
点击编辑,并进行编辑
保存修改删除操作这里不做演示。
Node.js 博客实例(五)编辑与删除功能
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。