为什么express会出现这么奇葩的循环引用问题?
苦逼码农 2017-10-09 06:38:22 问题1:
// 一个中间件栈,处理指向 /user/:id 的 GET 请求
router.get('/xy', function (req, res, next) {
console.log('--------------');
//console.log(JSON.stringify(req)); //为什么这个不行?
console.log(util.inspect(req, {depth: null}))
}, function (req, res, next) {
// 渲染常规页面
console.log("xxxxx");
// res.render('regular');
next();
});
console.log(JSON.stringify(req));
这一句打印的时候,会提示: Converting circular structure to JSON。
因此我上网查了一下,什么叫循环引用,看个例子:
http://blog.csdn.net/isaisai/article/details/51818766
var util = require("util")
var a = {};
a.b = a;
a.c = "123";
// console.log(JSON.stringify(a)); // 报错
console.log(util.inspect(a,{depth:null})); //depth:null 展开全部层级
————————————————————分割线——————————————————
以上叫循环引用,因此我立即把req重新命名,命名成:req1, 结果依然不奏效。
于是我只好采用util.inspect 来解决这个问题了。
第2个问题: 为什么console.log(req)又可以呢?
按道理说, js的对象也是json格式的(当然可以包含函数) ,因此console.log一个对象的时候,
内部的操作应该和util.inspect 差不多才对吧?