如何除錯你的 Node 程式碼?以下這篇文章為大家介紹兩種常見的調試 Node.js 的方式,有一定的參考價值,希望對大家有幫助!
很多時候,我苦惱於Node.js 的調試,只會使用console.log 這種帶有侵入性的方法,但其實Node.js 也可以做到跟瀏覽器調試一樣的方便。
本文環境:
mac Chrome 94.0.4606.81 node v12.12.0 vscode Version: 1.61.1
本文範例
本文範例採用的是先前探索洋蔥模型的,僅有一個文件,就是根目錄下#index.js
,如下:
const Koa = require('koa'); const app = new Koa(); console.log('test') // 中间件1 app.use((ctx, next) => { console.log(1); next(); console.log(2); }); // 中间件 2 app.use((ctx, next) => { console.log(3); next(); console.log(4); }); app.listen(9000, () => { console.log(`Server is starting`); });
V8 Inspector Protocol Chrome DevTools
v8 Inspector Protocol 是nodejs v6.3 新加入的調試協議,透過websocket與Client/IDE 交互,同時基於Chrome/Chromium 瀏覽器的devtools 提供了圖形化的調試介面。
我們進入專案根目錄,執行(留意這個8888 端口,後面會用到):
node --inspect=8888 index.js
結果如下:
結果出來一個連結-ws://127.0.0.1:8888/5f5c59fc-d42b-4ab0-be15-6feb1a05ed2d
。這個連結是 Node.js 和 Chrome 之前通信的 websocket 位址,透過 websocket 通信,我們可以在 Chrome 中即時看到 Node.js 的結果。
如何進入Chrome 的調試介面
第一種方式(自己嘗試無效)
開http://localhost:8888 /json/list
,其中8888
是上面--inspect
的參數。
[ { "description": "node.js instance", "devtoolsFrontendUrl": "chrome-devtools://devtools/bundled/js_app.html?experiments=true&v8only=true&ws=localhost:8888/5f5c59fc-d42b-4ab0-be15-6feb1a05ed2d", "devtoolsFrontendUrlCompat": "chrome-devtools://devtools/bundled/inspector.html?experiments=true&v8only=true&ws=localhost:8888/5f5c59fc-d42b-4ab0-be15-6feb1a05ed2d", "faviconUrl": "https://nodejs.org/static/images/favicons/favicon.ico", "id": "5f5c59fc-d42b-4ab0-be15-6feb1a05ed2d", "title": "index.js", "type": "node", "url": "file:///Users/gpingfeng/Documents/Personal/Test/test-onion/index.js", "webSocketDebuggerUrl": "ws://localhost:8888/5f5c59fc-d42b-4ab0-be15-6feb1a05ed2d" } ]
很多資料說,可以透過 devtoolsFrontendUrl
就可以直接訪問到,但嘗試了一下,並沒有成功。 【可能跟我的環境有關】
第二種方式
查了一下資料,在stackoverflow 找到對應的方案,如下:
devtools://devtools/bundled/inspector.html?experiments=true&ws=127.0.0.1:8888/5f5c59fc-d42b-4ab0-be15-6feb1a05ed2d
其中devtools://devtools/bundled/inspector.html?experiments=true
是固定的,ws
參數對應的就是websocket 位址。
可以看到介面如下:
第三種方式
Chrome 瀏覽器開啟HTTP 監聽接口頁面,打開dev tool,執行完node --inspect=8888 index.js
後可以看到這個圖標,點擊一下:
chrome://inspect/#devices,可以看到目前瀏覽器監聽的所有 inspect。
.vscode/launch.json(當然你也可以手動建立),其中
program 指的就是檔案入口,
${workspaceFolder} 指的是根目錄。
{ // Use IntelliSense to learn about possible attributes. // Hover to view descriptions of existing attributes. // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { "type": "pwa-node", "request": "launch", "name": "Launch Program", "skipFiles": [ "<node_internals>/**" ], "program": "${workspaceFolder}/index.js" } ] }按F5、或點選如下按鈕:
Attach to Node Process Action
透過 Attach to Node Process Action 的方式,我們可以直接偵錯執行中的 Node.js 進程。
例如我們先啟動專案-npm run start
。
然後command shift p
(window Ctrl Shift p
),輸入Attach to Node Process Action
,回車,然後選取執行過程再回車,就可以跟上面配置一樣調試程式碼了。
總結
本文總結了兩個常見的除錯 Node.js 的方式。第一種 Node.js 透過 websocket 的方式將資訊傳遞給 Chrome 瀏覽器,我們直接在 Chrome 中進行偵錯。第二種就是透過 Vscode Launch Configuration,自訂配置的方式進行除錯。透過 Attach to Node Process Action 的方式,可以方便的偵錯正在執行的 Node.js 程式碼,而不需要設定。
更多node相關知識,請造訪:nodejs 教學! !
以上是聊聊調試 Node.js 程式碼的兩種方式的詳細內容。更多資訊請關注PHP中文網其他相關文章!

不同JavaScript引擎在解析和執行JavaScript代碼時,效果會有所不同,因為每個引擎的實現原理和優化策略各有差異。 1.詞法分析:將源碼轉換為詞法單元。 2.語法分析:生成抽象語法樹。 3.優化和編譯:通過JIT編譯器生成機器碼。 4.執行:運行機器碼。 V8引擎通過即時編譯和隱藏類優化,SpiderMonkey使用類型推斷系統,導致在相同代碼上的性能表現不同。

JavaScript在現實世界中的應用包括服務器端編程、移動應用開發和物聯網控制:1.通過Node.js實現服務器端編程,適用於高並發請求處理。 2.通過ReactNative進行移動應用開發,支持跨平台部署。 3.通過Johnny-Five庫用於物聯網設備控制,適用於硬件交互。

我使用您的日常技術工具構建了功能性的多租戶SaaS應用程序(一個Edtech應用程序),您可以做同樣的事情。 首先,什麼是多租戶SaaS應用程序? 多租戶SaaS應用程序可讓您從唱歌中為多個客戶提供服務

本文展示了與許可證確保的後端的前端集成,並使用Next.js構建功能性Edtech SaaS應用程序。 前端獲取用戶權限以控制UI的可見性並確保API要求遵守角色庫

JavaScript是現代Web開發的核心語言,因其多樣性和靈活性而廣泛應用。 1)前端開發:通過DOM操作和現代框架(如React、Vue.js、Angular)構建動態網頁和單頁面應用。 2)服務器端開發:Node.js利用非阻塞I/O模型處理高並發和實時應用。 3)移動和桌面應用開發:通過ReactNative和Electron實現跨平台開發,提高開發效率。

JavaScript的最新趨勢包括TypeScript的崛起、現代框架和庫的流行以及WebAssembly的應用。未來前景涵蓋更強大的類型系統、服務器端JavaScript的發展、人工智能和機器學習的擴展以及物聯網和邊緣計算的潛力。

JavaScript是現代Web開發的基石,它的主要功能包括事件驅動編程、動態內容生成和異步編程。 1)事件驅動編程允許網頁根據用戶操作動態變化。 2)動態內容生成使得頁面內容可以根據條件調整。 3)異步編程確保用戶界面不被阻塞。 JavaScript廣泛應用於網頁交互、單頁面應用和服務器端開發,極大地提升了用戶體驗和跨平台開發的靈活性。

Python更适合数据科学和机器学习,JavaScript更适合前端和全栈开发。1.Python以简洁语法和丰富库生态著称,适用于数据分析和Web开发。2.JavaScript是前端开发核心,Node.js支持服务器端编程,适用于全栈开发。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

禪工作室 13.0.1
強大的PHP整合開發環境