Node.js 部落格執行個體(四)實現使用者頁面和文章頁面

來源:互聯網
上載者:User

標籤: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 部落格執行個體(四)實現使用者頁面和文章頁面

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.