You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Express.js中通过查询参数搜索关键词时出现错误

问题分析与修复方案

代码里的核心问题

  • 提前把req.query.keyword转成search变量后,后续修改req.query.keyword根本不会影响search,导致正则匹配用的是未处理的原始关键词
  • 当req.query.keyword不存在时,String(req.query.keyword)会生成字符串"undefined",这会错误触发搜索,匹配所有含"undefined"的内容
  • 手动替换%22太局限,URL编码的字符不止这一种,应该用标准解码方法
  • 没处理关键词里的正则特殊字符(比如.、*、?这些),一旦用户输入就会触发正则语法报错

修复后的代码

const rawKeyword = req.query.keyword;
if (rawKeyword) {
  // 解码所有URL编码的字符(包括%22这类)
  let search = decodeURIComponent(rawKeyword);
  // 转义正则特殊字符,避免语法错误
  search = search.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
  
  const query = {
    $or: [
      { title: { $regex: search, $options: 'i' } },
      { description: { $regex: search, $options: 'i' } }
    ]
  };
  mongooseQuery = mongooseQuery.find(query);
}

关键修复点说明

  • 先判断关键词是否存在,避免把undefined转成无效字符串触发错误搜索
  • 用decodeURIComponent替代手动替换,能处理所有URL编码的特殊字符,更严谨
  • 转义正则元字符,防止用户输入特殊符号导致正则解析报错
  • 确保search变量始终是处理后的最终值,直接用于MongoDB的正则匹配

内容的提问来源于stack exchange,提问作者Abdelrahman Shaheen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 13:25:16