用Nodejs写简单的模糊查询接口

直接上代码,注意看代码中的注释

// 这是一个查询博客文章的接口
router.get(/blog, async (req, res) => {
          
   

// 前端传过来的数据为 关键词keyword 和 分类的id categoryId
  let {
          
    keyword, categoryId } = req.query
  
  // 两者皆可以为空,现对它们做判断,但在实际情况中它们两个不能同时为空,还需要前端做好校验
  categoryId = categoryId == null ? 0 : categoryId
  keyword = keyword == null ?  : keyword
  
  // 这是查询的 参数 和 sql语句的where后面的部分,采用数组的形式为了方便后面的拼接
  let params = []
  let whereSqls = []
  
  // 在categoryId不为空的情况下push部分sql语句,为了拼接不产生问题前后需要有空格
  if (categoryId !== 0) {
          
   
    whereSqls.push( category_id = ? )
    params.push(categoryId)
  }
  
  // keyword也是同理
  if (keyword !== ) {
          
   
    // 这里是模糊查询的重点
    whereSqls.push( (title like ? or content like ?) )
    // 因为上面有两个问号, 所以要push两个参数
    params.push(% + keyword + %)
    params.push(% + keyword + %)
  }
  
  // 查询内容
  let whereSqlstr = 
  if (whereSqls.length > 0) {
          
   
    // 把where后面的语句用and连接
    whereSqlstr =  where  + whereSqls.join( and )
  }
  
  // 最后再把完整的sql语句拼起来
  let sql = select * from blog  + whereSqlstr + order by create_time desc


  // 查询数量
  // 这里的查询数量完全可以取上面的查询结果的 rows.length
  let searchCount =  select count(*) from blog  + whereSqlstr
  let searchCountParams = params
  
  // query是我已经封装好的数据库查询方法,会返回一个成功的promise对象,里面有err和rows
  let searchResult = await query(sql, params)
  let countResult = await query(searchCount, searchCountParams)
  
  // 对查询结果进行判断
  if (searchResult.err == null && countResult.err == null) {
          
   
    res.send({
          
   
      code: 200,
      msg: 查询成功,
      data: {
          
   
        // 把关键词和分类id也返回前端,说不定要用
        keyword,
        categoryId,
        rows: searchResult.rows,
        count: countResult.rows[0]["count(*)"]
      }
    })
  } else {
          
   
    res.send({
          
   
      code: 500,
      msg: "查询失败",
    })
  }
})

这样子接口就写好了

经验分享 程序员 微信小程序 职场和发展