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>

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

  • 相关阅读:
    摄像头置顶成品
    opencv鼠标事件
    opencvinpainting图像修复
    opencvdilate膨胀
    opencverode侵蝕
    opencvOTSU大津法—最大类间方差法
    opencvgetStructuringElement结构元素(内核矩阵)
    opencv时间
    IDEA在代码上无错误提示,但是编译时出现error:非法字符
    计算机端口号
  • 原文地址:https://www.cnblogs.com/yuity/p/5299455.html
Copyright © 2011-2022 走看看