Node.js Student.find报Converting circular structure to JSON错误
错误原因
Student.find()是Mongoose的查询方法,执行后返回的是Query查询实例(类Promise的thenable对象),不是最终查询出的学生数据:
- 这个Query实例内部存在循环引用结构,本身无法被
JSON.stringify正常序列化 - 原有代码的
then回调没有设置入参接收查询完成后resolve出的实际学生数据,直接把带循环引用的Query实例传给了res.send() - Express处理响应时会自动对传入内容做JSON序列化,遇到循环引用就会抛出
TypeError: Converting circular structure to JSON错误
修复方法
在then回调中接收查询返回的实际学生文档数据,再将数据传给响应方法即可,修复后的代码:
app.get('/students', (req, res)=>{ const studentsQuery = Student.find(); studentsQuery.then((studentsData)=>{ // 此处studentsData才是查询到的学生列表数据,无循环引用可正常序列化 res.status(200).send(studentsData); }).catch((e)=>{ console.log(e); res.status(400).send(e); }) })
如果习惯async/await写法,也可以简化成如下形式,逻辑完全一致:
app.get('/students', async (req, res)=>{ try { const studentsData = await Student.find(); res.status(200).send(studentsData); } catch (e) { console.log(e); res.status(400).send(e); } })
内容的提问来源于stack exchange,提问作者user15998452
相关产品推荐
相关产品推荐

