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

MongoDB保存HTML片段成功但查询时报TypeError: Converting circular structure to JSON错误如何解决?

解决MongoDB检索时“Converting circular structure to JSON”错误

这个问题的根源很明确:你在getSavedHtmls里直接返回了MongoDB的Cursor对象,而不是实际的文档数据。

当你调用find({})时,MongoDB并不会立刻返回所有匹配的文档,而是返回一个Cursor游标对象——这个对象内部包含了和数据库连接相关的拓扑结构(比如报错里提到的NativeTopology、ServerSessionPool),这些结构存在循环引用关系。当Express尝试把这个Cursor对象序列化为JSON响应时,JSON.stringify()无法处理循环引用,就抛出了你看到的错误。

修复方法

只需要把游标转换成普通的JavaScript数组即可,MongoDB的Cursor提供了.toArray()方法,它会异步遍历游标并返回所有文档的数组:

修改你的getSavedHtmls函数:

exports.getSavedHtmls = async function(req,res){
  try{
    // 调用toArray()把游标转为文档数组
    let htmls = await getDatabase().collection('htmls').find({}).toArray();
    res.send(htmls);
  }catch(e){
    console.log(e);
    res.status(404).json({error: 'Failed to retrieve data'});
    return;
  }
}

额外提示

如果你的htmls集合数据量很大,一次性用toArray()加载所有数据到内存可能会有性能问题,这种情况下可以考虑分页查询(用limit()和skip()),或者流式返回数据。但如果是小型数据集,toArray()是最简单直接的解决方案。

另外,你原来的res.json(404)写法不太规范,应该用res.status(404).json(...)来设置正确的HTTP状态码并返回JSON格式的错误信息,我在修复后的代码里也调整了这一点。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 06:52:47