一个简单的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 %>

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

原文地址:https://www.cnblogs.com/yuity/p/5304923.html