zoukankan      html  css  js  c++  java
  • 一个简单的blog系统(十一) 增加文章检索功能

    1. 现在,我们就来给博客添加文章检索功能。假定,可以根据关键字魔木查询文章标题,也就是说支持正则表达式,而且字母不会区分大小写。

      1.1 首先,我们修改header.ejs,在其中修改如下代码:

    <form class="navbar-form navbar-right" role="search" method="GET" action="/search">
    <div class="form-group">
      <input type="text" class="form-control" name="keyword" placeholder="Search">
    </div>
    <button type="submit" class="btn btn-default">搜索</button>
    </form>

      1.2 然后,我们打开post.js,在最后添加如下代码:

    //返回通过标题关键字查询的所有文章信息
    Post.search = function(keyword, callback) {
          mongodb.open(function (err, db) {
            if (err) {
              return callback(err);
            }
            db.collection('posts', function (err, collection) {
                if (err) {
                    mongodb.close();
                    return callback(err);
                }
                  var pattern = new RegExp(keyword, "i");
    
                  collection.find({
                    "title": pattern
                  }, {
                    "name": 1,
                    "time": 1,
                    "title": 1
                  }).sort({time: -1}).toArray(function (err, docs) {
                    mongodb.close();
                    if (err) {
                     return callback(err);
                    }
                    callback(null, docs);
                  });
            });
          });
    };

      其中,我们通过pattern定义了一个包含关键字keyword的正则表达式,假设keyword字符串的开头或者结尾包含特殊字符,比如说*,则需要转义才可以。

      

      1.3 然后,我们修改index.js,在其中添加如下代码,以作为对/search的路由相应:

    //搜索页面的路由
    router.get('/search', function (req, res) {
          Post.search(req.query.keyword, function (err, posts) {
            if (err) {
                req.flash('error', err); 
                return res.redirect('/');
            }
            res.render('search', {
                title: "SEARCH:" + req.query.keyword,
                posts: posts,
                user: req.session.user,
                success: req.flash('success').toString(),
                error: req.flash('error').toString()
            });
          });
    });

      1.4 最后,我们在views下新建一个search.ejs的文件,在其中添加如下代码:

    <%- include common/header %>
    
    <div class='container'>
        <ul class="list-group">
            <% var lastYear = 0 %>
            <% posts.forEach(function (post, index) { %>
                  <% if (lastYear != post.time.year) { %>
                <li class="list-group-item"><%= post.time.year %></li>
                  <% lastYear = post.time.year } %>
                <li class="list-group-item list-group-item-info"><%= post.time.day %></li>
                <li class="list-group-item">
                    <span class="badge"><%= post.name %></span>
                    <a href="/u/<%= post.name %>/<%= post.time.day %>/<%= post.title %>" style="color: purple;"><%= post.title %></a>
                </li>
            <% }) %>
        </ul>
    </div>
    <%- include common/footer %>

      至此,我们就给博客添加了文章检索的功能。

  • 相关阅读:
    [HNOI 2003] 消防局的设立
    Codeforces 341
    CF 专栏
    TC SRM 570
    TC SRM 588
    TC SRM 589
    TC专栏
    BZOJ 第二十一页 除草
    BZOJ 第二十二页 除草
    BZOJ 第二十三页 除草
  • 原文地址:https://www.cnblogs.com/yuity/p/5304923.html
Copyright © 2011-2022 走看看