TypeError:将循环结构转换为 mongodb/mongoose 的 JSON

Posted

技术标签:

【中文标题】TypeError:将循环结构转换为 mongodb/mongoose 的 JSON【英文标题】:TypeError: Converting circular structure to JSON for mongodb/mongoose 【发布时间】:2021-03-05 04:13:08 【问题描述】:
var express = require("express")
let PersonModel = require('./PersonModel')
let mongodbConnected=require('./MongodbConnect')
var app =express()
var bodyparser=require("body-parser")
const  format  = require("path")
const  count  = require("console")
const  countDocuments  = require("./PersonModel")
const  exec  = require("child_process")
const  get  = require("http")
const  ALL  = require("dns")
app.use(bodyparser.urlencoded(extended:false))
app.get('/',function(req,res)
res.sendFile('Person.html',  root: __dirname );
)
app.get('/about',function (req,res)
res.send("This is a simple express application using mongodb express html and mongoose")
PersonModel.countDocuments().exec()
 .then(count=>
 console.log("Total documents Count before addition :", count)
) .catch(err => 
    console.error(err)
    )
   
   )
   app.post('/add', function(req,res)
    Pname=req.body.empname
    console.log('Pname',Pname)
    PAge=req.body.Age
    PGender=req.body.gender
    PSalary=req.body.salary
   
    const doc1 = new PersonModel(
    
    name:Pname,age:33,Gender:PGender,Salary
   :PSalary
    )
   
    doc1.save(function(err,doc)
    if (err) return console.error(err)
    else
    console.log("doc is added ",doc)
    //res.send("Record is added"+doc)
    res.send(
    'status':true,
    'Status_Code':200,
    'requested at': req.localtime,
    'requrl':req.url,
    'request Method':req.method,
    'RecordAdded':doc);

 
 )
)
app.post('/findperson', function(req,res)

 PAge=req.body.Age
 console.log("Page",PAge)
 PersonModel.find(age:$gte:PAge)
 // find all users


 .sort(Salary: 1) // sort ascending by firstName
 .select('name Salary age')// Name and salary only
 .limit(10) // limit to 10 items

 .exec() // execute the query
 .then(docs => 
 console.log("Retrieving records ",docs)
 res.send(docs)
 )
 .catch(err => 
    console.error(err))


)
app.post('/delete', function(req,res)
Pgender=req.body.gender
PersonModel.findOneAndDelete(Gender:Pgender 
).exec()
.then(docs=>
console.log("Deleted")
console.log(docs); // Success
).catch(function(error)
console.log(error); // Failure
);
)
app.post('/update', function(req,res)
Pname=req.body.empname

Pnewname=req.body.newname
PnewAge=req.body.newage
PersonModel.findOneAndUpdate( name: Pname ,"$set":name:Pnewname,age:PnewAge).exec()
.then(docs=>
console.log("Update for what i get is ",Pname
,Pnewname,PnewAge)
console.log(docs); // Success
).catch(function(error)
    console.log(error); // Failure
 );
)

var docnum=PersonModel.countDocuments(ALL)
app.post('/count', function(req, res)
    res.send('Total number of documents: ', docnum)

)


app.listen(5000,function()
console.log("Server is running on the port 5000")
)

你好。 第一次在***上发帖,不知道发什么信息,请告诉我。 我试图制作一个页面(/count)来简单地显示文档的数量。我尝试了不同的代码,但没有任何效果。这个错误不断出现“TypeError: Converting circular structure to JSON”。

这是学校作业,所以代码是老师给我的,我必须添加一个 POST 方法来添加一个显示文档总数的页面。

有什么想法吗? 谢谢。

【问题讨论】:

【参考方案1】:

循环结构不是关于mongo,而是JS如何读取JSON对象。

例如,如果你有这个对象:

var object = 
  propA: "propA",
  propB: object

当 JS 尝试反序列化 JSON 对象时,将处理:一个对象包含一个对象,该对象又包含该对象,又一次又一次……这是一种循环依赖。

不仅有一个对象本身,还有更多对象:

var objectA = 
  propA: objectB

var objectB = 
  propA: objectA

同样的情况。

使用node.js,您可以使用util.inspecet(),它会在发现循环依赖时自动显示[Circular]

你可以这样使用:

var util = require('util')
console.log(util.inspect(objectA))

【讨论】:

以上是关于TypeError:将循环结构转换为 mongodb/mongoose 的 JSON的主要内容,如果未能解决你的问题,请参考以下文章

实现数据表时遇到错误-TypeError:将循环结构转换为 JSON

如何解决 NodeJS 中的“TypeError:将循环结构转换为 JSON”

TypeError:将循环结构转换为 JSON --> 从具有构造函数“ClientRequest”的对象开始

angularJs TypeError:将循环结构转换为JSON

尽管函数执行正确,但“将循环结构转换为 JSON”错误

Pearsonr:TypeError:没有找到与指定签名和转换匹配的循环,用于 ufunc add