zoukankan      html  css  js  c++  java
  • 一个简单的blog系统(四) 实现用户页面和文章页面

    1.现在我们来给博客添加用户页面和文章页面。

      1.1 所谓用户页面就是当单击某个用户名链接时,跳转到:域名/u/用户名,并且跳出该用户的所有文章。同样,文章页面就是当单击某篇文章标题时,跳转到:域名/u/用户名/事件/文件名,进入到该文章的页面(也许还有该文章的评论等)

      首先,我们先打开post.js,将Post.get修改为Post.getAll, 同时将index.js中的Post.get修改为Post.getAll。在post.js最后添加如下代码:

     1 //获取一篇文章,根据用户名,发表日期以及文章名精确获取一篇文章
     2 Post.getOne = function(name, day, title, callback) {
     3       //打开数据库
     4       mongodb.open(function (err, db) {
     5         if (err) {
     6           return callback(err);
     7         }
     8         //读取 posts 集合
     9         db.collection('posts', function (err, collection) {
    10               if (err) {
    11                 mongodb.close();
    12                 return callback(err);
    13               }
    14           //根据用户名、发表日期及文章名进行查询
    15               collection.findOne({
    16                 "name": name,
    17                 "time.day": day,
    18                 "title": title
    19               }, function (err, doc) {
    20                 mongodb.close();
    21                 if (err) {
    22                   return callback(err);
    23                 }
    24                 //解析 markdown 为 html
    25                 doc.post = markdown.toHTML(doc.post);
    26                 callback(null, doc);//返回查询的一篇文章
    27               });
    28         });
    29       });
    30 };

      然后,我们来实现用户页面和文章页面,打开index.js,在app.post('/upload')后添加如下代码:

    //用户页面路由
    router.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()
                });
            });
        });
    });
    
    
    //文章页面路由
    router.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()
            });
        });
    });

      最后,我们创建用户页面和文章页面的模板文件:在views文件夹下面新建user.ejs,添加如下代码,同时将index.ejs也做出相应的修改:

    <!-- 发表的文章内容 -->
        <div class="list-group">
            <%  posts.forEach(function(post, index) { %> 
            <div class="list-group-item">
                <h4><a href="/u/<%= post.name %>/<%= post.time.day %>/<%= post.title %>"><%= post.title %></a></h4>
                <p class="list-group-item-text" style="padding: 10px 0;">
                    <%- post.post %>
                </p>
                <p class="info">
                    <a href="/u/<%= post.name %>"><%= post.name %></a>&nbsp;&nbsp;发布于:&nbsp;&nbsp;<%= post.time.minute %>
                    <span class='glyphicon glyphicon-comment' style="padding:0 10px;">评论(0)</span>
                    <span class="glyphicon glyphicon-share-alt">阅读(0)</span>
                </p>
            </div>
        <% }); %>

      在views文件夹下新建 article.ejs ,添加如下代码:

    <div class='container'>
        <p class="list-group-item-text" style="padding: 10px 0;">
            <%- post.post %>
        </p>
        <p class="info">
            <a href="/u/<%= post.name %>"><%= post.name %></a>&nbsp;&nbsp;发布于:&nbsp;&nbsp;<%= post.time.minute %>
            <span class='glyphicon glyphicon-comment' style="padding:0 10px;">评论(0)</span>
            <span class="glyphicon glyphicon-share-alt">阅读(0)</span>
        </p>
    </div>

    至此,用户页面和文章页面的相应功能已经实现。

  • 相关阅读:
    Java实现 洛谷 P1060 开心的金明
    (Java实现) 洛谷 P1605 迷宫
    (Java实现) 洛谷 P1605 迷宫
    (Java实现)洛谷 P1093 奖学金
    (Java实现)洛谷 P1093 奖学金
    Java实现 洛谷 P1064 金明的预算方案
    Java实现 洛谷 P1064 金明的预算方案
    (Java实现) 洛谷 P1031 均分纸牌
    QT树莓派交叉编译环开发环境搭建(附多个exe工具下载链接)
    武则天红人对唐睿宗的桃色报复(如此缺少城府,注定了要在宫廷中过早地出局)
  • 原文地址:https://www.cnblogs.com/yuity/p/5299455.html
Copyright © 2011-2022 走看看