當經過打印日誌調試不太夠用的時候:node
console.log
來查看代碼的一些運行輸出,這是很痛苦的一件事情,那麼有沒有其餘更好的方法呢?
console.log
來調試 JavaScript 服務端代碼是很是古老的方法console.log
是徹底不夠用的,他須要咱們逐行的調試,而且每一次都要重啓咱們的服務。打印日誌的調試代碼也會影響咱們代碼的結構性,它是沒有必要的代碼,咱們還要花些功夫移除它。git
例如:github
須要花多少精力才能從日誌中找出咱們須要的信息和執行過程?chrome
這看着就讓人頭疼,這不是一個好的方法!express
一個更有效更好的方法應該是斷點調試。對於斷點調試,咱們能夠經過步入堆棧信息和事件循環來找到問題。npm
你若是明白了這個方法,哪就來看看其餘的選擇,有哪些選擇?我很高心你能這麼問我!瀏覽器
對的,Node 確實自己就構建了 inspector,node 的 inspector 使用了 V8 的調試協議視圖。bash
讓我給你試試,新建一個 node 項目app
mkdir node-debugging && cd node-debugging && npm init -y && npm install express nodemon && touch server.js
複製代碼
開始咱們的項目,而後安裝 express 和 nodemon:ide
node server.js
複製代碼
如今咱們有了一個 express 基礎服務,可是咱們不是用傳統的方法node server.js
來啓動服務,咱們添加一個額外的闡述到咱們的命令行,--inspect
來通知 node 暴露這個新的 debugger 協議。
一旦咱們用 inspector 的方式來啓動服務,這兒就會有一個輸出:
對的,他開始工做了!用 chrome 來打開http://localhost:3000
這個連接,在開發者工具裏面,有沒有觀察到額外的一個東西?
node 存在在咱們的瀏覽器裏面?確實!咱們任然可使用咱們的 app 像以前同樣——
localhost:3000
.
http://0.0.0.0:9229/
端口是爲開發者提供的。
node 的 Inspector 讓你用開發者工具用戶界面直接調試 node,他能夠直接鏈接到 node 的運行進程!
若是你知道他在 Firefox 和 Safari 中是怎麼工做的,那咱們來一塊兒討論討論。使用 node 的 debugger 和使用 chrome 客戶端的開發者工具相似,設置斷點、執行代碼、步入斷點、找出 bug。
你能夠想一想這個是多麼的有用,若是咱們有一個錯誤在一個大的 controller 裏面!咱們能夠經過這個 debugger,查看調用堆棧、做用域、環境變量,全局變量等等,這是頗有用的一個工具!然而咱們並無止步,在 2018 年七月 20 號對於調試 node 是特別的一天。 爲甚? 谷歌 chrome 實驗室團隊,開源了他們先進的調試工具:ndb
Ndb 對於調試是一個好的調試工具。來看一下。npm install -g ndb
複製代碼
就和其餘的 npm 包同樣,只須要安裝就能夠開始使用。
使用 ndb 的時候,只須要在命令行前面 加上 ndb 就好。
讓咱們重啓服務——注意咱們使用的 nodemon——和其餘傳統項目同樣。 咱們有了一個單獨的 chrome 實例來調試 node,多棒!咱們甚至能夠拿到 node 的 process 全局對象——就比如它是 node 的window
對象。