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

Node.js+MongoDB模糊查询REST接口报错求助及示例需求

解决你的Express + MongoDB模糊查询接口问题

嘿,我来帮你搞定这个问题!从你给出的信息来看,主要有两个关键问题导致了当前的错误,咱们一步步来修正:

1. 首先解决Cannot GET的路由拼写错误

你在Postman里调用的路径是/autocoplete,但代码里定义的路由是/autocomplete/:size——仔细看!你把autocomplete拼成了autocoplete(少了一个t),这就是为什么服务器找不到这个接口的直接原因。先把拼写改对,这是最基础的一步。

2. 修正Mongoose查询的语法错误

你误用了MongoDB原生驱动的toArray()方法,但Mongoose的find()返回的是Query对象,它不支持这个方法。另外你的回调函数写法也有语法问题,箭头函数的位置不对。

修正后的完整路由代码

先给你一个基于回调的修正版本,和你原来的写法更接近:

router.get('/tire/autocomplete/:size', VerifyToken, function(req, res) { 
  const size = req.params.size; 

  // 使用Mongoose的exec()来执行查询,这才是正确的姿势
  TechInfo.find({ Size: new RegExp(size, 'i') })
    .exec(function(err, techinfos) { 
      if (err) { 
        console.error(err); 
        return res.status(400).send({ 
          status: 'ko', 
          data: { msg: err.message }
        }); 
      } 
      res.status(200).send({
        status: 'ok', 
        data: {
          msg: 'Size tires available', 
          tires: techinfos
        }
      }); 
    }); 
});

推荐用Async/Await写法(更优雅易读)

如果你想让代码更现代、更易维护,推荐改用async/await的异步写法,出错处理也更清晰:

router.get('/tire/autocomplete/:size', VerifyToken, async function(req, res) { 
  try {
    const size = req.params.size; 
    // 直接await查询结果,不用嵌套回调
    const techinfos = await TechInfo.find({ Size: new RegExp(size, 'i') });
    
    res.status(200).send({
      status: 'ok', 
      data: {
        msg: 'Size tires available', 
        tires: techinfos
      }
    });
  } catch (err) {
    console.error(err);
    res.status(400).send({ 
      status: 'ko', 
      data: { msg: err.message }
    });
  }
});

几个额外的小提示

  • 检查你的路由挂载前缀:如果这个router是挂载在/api/v1.0/equipment/tires下的,那完整请求路径应该是/api/v1.0/equipment/tires/tire/autocomplete/[你的size参数]——如果觉得路径里的tire有点冗余,可以把路由改成/autocomplete/:size,这样请求路径就更简洁:/api/v1.0/equipment/tires/autocomplete/17(举个例子)。
  • new RegExp(size, 'i')已经实现了不区分大小写的模糊匹配,完全符合你想要的SQL like效果。
  • 确认VerifyToken中间件没有问题,它会不会在验证阶段就把请求拦截了?可以先暂时注释掉测试一下,排除中间件的影响。

最后,重启你的Express服务,在Postman里用正确的路径测试,应该就能正常返回数据啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:42:58