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 中的使用者名稱是否存在,若存在且和當前文章頁面的作者名相同,則顯示編輯和刪除按鈕,否則不顯示:
article.ejs ,將代碼修改成如下:
<%- 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 %>
完工!試一下效果,先登入,再測試編輯和刪除操作:
點擊進入文章可看到編輯和刪除按鈕,前提是已登入
點擊編輯,並進行編輯
儲存修改
刪除操作這裡不做示範。
nodejs中,各種普通函數的文檔說明在什地方找?比如字串處理,類似asubstring()這樣的?
node.js是用的google v8作為javascript的引擎,所以只要是chrome瀏覽器裡支援的javascript的object和函數,node.js裡都有。node的網站上的api只是node自己新添的東西。所以你可以看在mozilla的網站上的javascript reference就行了。developer.mozilla.org/en/docs/JavaScript/Reference
一般用什ide 編輯nodejs
我一直用sublime。。裝個node的外掛程式,不過這個外掛程式我只用一個自動補全console.log,還有文法高亮...= =其實熟悉了js,寫node只要把node.org/api這個網址開啟基本就夠了。。要什麼外掛程式就去npm看看,不知道怎麼用就看看readme。
至於調試,記得有個項目有改動儲存就自動重啟的不錯,不過項目太忙也懶得找- -就一直手動了。。
建議不要刻意的去追求自動補全之類的IDE,其實沒有必要,反而降低編碼速度。因為js是以靈活性著稱的,和C# JAVA是完全不一樣的,如果你寫多了C語言其實也是差不多的感覺。我曾經做了2年多的C#和JAVA,轉C後剛開始也不習慣沒有IDE的感覺,但是堅持幾個月就哦了。
不過vs有一個node的IDE,我用了一下,覺得不舒服,而且我開發node都是在linux平台上運行,所以最後也沒用。