標籤:node.js
原教程 https://github.com/nswbmw/N-blog/wiki/_pages的第四章,由於版本等的原因,在原教程基礎上稍加改動即可實現。
現在,我們來給部落格添加使用者頁面和文章頁面。
所謂使用者頁面就是當點擊某個使用者名稱連結時,跳轉到:網域名稱/u/使用者名稱 ,並列出該使用者的所有文章。
同理,文章頁面就是當點擊某篇文章標題時,跳轉到:網域名稱/u/使用者名稱/時間/文章名 ,進入到該文章的頁面。
post.js:
將 Post.get 修改為 Post.getAll ,同時將 index.js 中 Post.get 修改為 Post.getAll 。在 post.js 最後添加如下代碼:
//擷取一篇文章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);}console.log("333");console.log(doc);//解析 markdown 為 htmldoc.post = markdown.toHTML(doc.post);console.log("444");callback(null, doc);//返回查詢的一篇文章console.log("555");});});});};Post.getAll :擷取一個人的所有文章(傳入參數 name)或擷取所有人的文章(不傳入參數)。
Post.getOne :根據使用者名稱、發表日期及文章名精確擷取一篇文章。
index.js :添加如下代碼:
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('error', 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('error', 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()});});});在 blog/views/ 檔案夾下建立 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.name %></a> | 日期:<%= post.time.minute %> </p> <p><%- post.post %></p><% }) %><%- include footer %>
在 blog/views/ 檔案夾下建立 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 %>
現在,我們給部落格添加了使用者頁面和文章頁面。實現效果:
點擊文章標題:
點擊
Node.js 部落格執行個體(四)實現使用者頁面和文章頁面