用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: "查询失败", }) } })
这样子接口就写好了
下一篇:
Mybatis一对一关联关系-案例