node+express编写后台模糊查询命令遇到的坑

3 篇文章 0 订阅
2 篇文章 0 订阅

废话就不多说了,直接上问题,以搜索文章为例:

controllers里的请求语句:

async function search(req, res) {
  const { title, author } = req.query;
  if (!title && !author) {
    return sendMissParamResponse(res, true)
  }
  const data = await Article.searchArticle(
    title || '',
    author || ''
  );
}

models里的查询语句:

const searchArticle = (title, author) => sequelize.query(
  ArticleSQL.search,
  {
    replacements: [
      `%${title}%`,
      `%${author}%`
    ],
    type: sequelize.QueryTypes.SELECT
  }
);

注意:replacements中的`%${ title }%`就是模糊查询的SQL语法,大家都知道这是es6字符串拼接的写法,${ title }表示是你从前端传过来的参数,意思就是搜索 title = xxxx的文章,下面的author相同,不再赘述。

sql里的SQL语句:

  search: `
    SELECT DISTINCT
      article.id,
      article.title,
      account_info.avatar img,
      DATE_FORMAT(article.create_time,"%Y-%m-%d %h:%i:%s") time,
      account_info.uuid,
      account_info.name userName
    FROM
      article, account_info, type
    WHERE
      article.user_id = account_info.uuid AND
      article.status = 1 AND
      (article.title LIKE ? OR
      account_info.name LIKE ?)
    ORDER BY
      article.create_time desc
  `,

主要是在WHERE里的语句比较重要,特别是这一句:(article.title LIKE ? OR account_info.name LIKE ?)
之前我们具体查询的时候用的是 ' = ' ,但是模糊查询用的是 ' LIKE ' 。

但是你会发现,不管你在搜索栏里输入啥,返回的结果都是一样的!很是无语,怎么查找问题(浏览器没报错,所以不属于错误的范畴)呢?或者你将上述的SQL语句输入到SQLyog工具里去试,发现出现的数据是非正常的,不是你预期的那样。

问题解决:

在前端进行传值的时候,应先进行处理,或者在后台controllers里处理也是一样的,怎么处理?

如果输入框中title有值,而author为空,这个时候我们很容易处理成空字符串,但是我们似乎忘记了一件事,就是在创建表的时候,在创建字段的时,字段默认的值类型为NULL,也就是说,在SQL查询语句中查询数据时,最好将空的数据变为当初设置的默认类型NULL。

以代码为例:

async function search(req, res) {
  const { title, author } = req.query;
  if (!title && !author) {
    return sendMissParamResponse(res, true)
  }
  const data = await Article.searchArticle(
    title || null,
    author || null
  );
}

也就是在处理title和author为空的时候,数据类型应为null而不是字符串。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
学习Node Express后台管理项目需要掌握Node.js和Express框架的基础知识。首先,需要了解Node.js是什么,它是一个基于JavaScript的运行时环境,可以用来构建服务器端应用程序。然后,需要学习Express框架,它是一个基于Node.js的Web应用程序开发框架,可以简化服务器端应用程序的开发流程。 学习Node Express后台管理项目的关键步骤包括:创建项目,配置路由,处理请求和响应,连接数据库,实现用户认证和授权,设计并实现界面等。需要掌握Express框架的常用中间件、路由和控制器的使用,以及如何与数据库进行交互,如何实现用户认证和授权等。 在学习过程中可以通过阅读官方文档、参考教程和实际操作来深入理解Node Express后台管理项目的开发流程。另外,还可以利用开源项目进行学习和实践,例如使用GitHub上的相关项目来学习项目结构和代码规范,提高自己的编码能力。 学习Node Express后台管理项目还需要注重实践,通过自己动手实现项目功能来加深理解和掌握技能。同时,要注重与他人交流和合作,可以参加相关的技术社区或线下活动,与他人交流经验和学习成果,不断提升自己的技术水平。 总之,学习Node Express后台管理项目是一个系统全面的学习过程,需要持续不断地学习、实践和与他人交流,才能成为一名优秀的后台管理项目开发人员。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值