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

Node.js Express调用Mongoose find方法出现循环结构转JSON错误如何解决

报错根因

Mongoose的find()方法为异步方法,你没有使用await等待查询执行完毕,此时赋值给campgrounds的是Mongoose的Query实例对象而非实际查询结果。该实例内部包含MongoDB连接拓扑相关的循环引用结构,Express执行res.send()时会自动将参数序列化为JSON,触发循环结构转换报错。

修复方案
  1. 给路由处理函数添加async标识,声明为异步函数
  2. 在Campground.find()前添加await关键字,等待查询完成获取实际营地数据数组
  3. 可将写死的查询条件替换为和前端传参匹配的模糊查询,实现完整搜索能力

修复后的代码如下:

app.get('/results', async (req, res) => {
  const { search_query } = req.query
  console.log(search_query)
  // $regex实现模糊匹配,$options: 'i'表示忽略大小写
  const campgrounds = await Campground.find({
    title: { $regex: search_query, $options: 'i' }
  })
  res.send(campgrounds)
})
可选优化
  • 前端表单的action="/results/?可简化为action="/results",GET表单提交时会自动将表单字段拼接为查询字符串,末尾的问号属于冗余内容。
  • 如果你需要返回关联的作者、评论、分类数据,可以在查询后链式调用populate()方法,例如:
    const campgrounds = await Campground.find({
      title: { $regex: search_query, $options: 'i' }
    }).populate('author', 'username').populate('category', 'name')
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 01:06:03