node.js - nodejs中把熱request保存下來(lái),使用JSON.stringify(req)報(bào)錯(cuò),請(qǐng)問(wèn)怎么解決?
問(wèn)題描述
router.post('/login', function(req, res, next) { var file = 'c:a.txt'; var str = JSON.stringify(req); fs.appendFile(file, str, function(err){ if(err) { console.log(err); } else { console.log('寫(xiě)入文件ok'); } }); });
初步學(xué)習(xí)nodejs,當(dāng)一個(gè)請(qǐng)求過(guò)來(lái)的時(shí)候,我想看看 這個(gè)requert中到底有多少東西,在控制臺(tái)可以直接使用console打印出來(lái),但是控制臺(tái)太雞肋,我就想保存到記事本中 在用本地的ide打開(kāi)看,結(jié)果在 JSON.stringify(req) 這里就報(bào)錯(cuò)了。
我這里 把 var str = req; 這個(gè)也不行,換成這個(gè) 保存在txt中的就是 [object Object]了.
求大神幫我看看, 這個(gè)是那里出了問(wèn)題?
問(wèn)題解答
回答1:req是無(wú)法json序列化的,想看里面有什么除了console就只能是debug
回答2:req中存在循環(huán)引用的字段,所以無(wú)法stringify。舉個(gè)例子let a = {}let b = {a}a.b = bJSON.stringify(a) //TypeError: Converting circular structure to JSONa.toString() //[Object Object]如果你想查看req,可以通過(guò)調(diào)試來(lái)查看
router.post('/login', function(req, res, next) { var file = 'c:a.txt'; var str = JSON.stringify(req); debugger; //斷點(diǎn) res.end(’’)});
命令行調(diào)試node debug <main.js>
chrome調(diào)試node --inspect <main.js>
回答3:想要在文件中看 req 很簡(jiǎn)單。
router.post('/login', function(req, res, next) { console.log(req);});
壓根兒就不需要自己進(jìn)行文件寫(xiě)入的操作,直接命令行輸入 node app.js > ./a.log , req的所有內(nèi)容就會(huì)寫(xiě)入到當(dāng)前工作目錄的 a.log 這個(gè)文件中,注意把 app.js 換成你要運(yùn)行的js文件
