用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一对一关联关系-案例
