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 %>

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

  • 相关阅读:
    asp.net ajax传递Json给aspx.cs后台 webmethod方法传递json
    新手 Redis 配置笔记(windows),附下载地址
    在 LINQ to Entities 查询中无法构造实体或复杂类型
    WebApi 4.0 默认方式不支持HttpGet 请求
    jQuery .Ajax Error Handling Function
    My97DatePicker 与 某个CSS冲突 ,导致无法显示
    基础连接已经关闭: 未能为 SSL/TLS 安全通道建立信任关系
    使用Autofac部署IIS6.0时未能加载文件或程序集“System.Core, Version=2.0.5.0...“
    Could not load file or assembly 'System.Core, Version=2.0.5.0 和autofac冲突的问题
    线程间操作无效: 从不是创建控件“textBox2”的线程访问它
  • 原文地址:https://www.cnblogs.com/yuity/p/5304923.html
Copyright © 2011-2022 走看看