摘要:調試指南本指南將幫助你入門調試應用程序和腳本。這樣做可能會給你帶來潛在的重大安全威脅,我們建議你確保適當的防火墻和訪問控制措施,以防止安全風險。不再維護或記錄調試協議。
入門指南
安裝Node之后,讓我們嘗試構建我們的第一個Web服務器,創建名為“app.js”的文件,并粘貼以下代碼:
const http = require("http"); const hostname = "127.0.0.1"; const port = 3000; const server = http.createServer((req, res) => { res.statusCode = 200; res.setHeader("Content-Type", "text/plain"); res.end("Hello World "); }); server.listen(port, hostname, () => { console.log(`Server running at http://${hostname}:${port}/`); });
之后,使用node app.js運行你的Web服務器,訪問http://localhost:3000,你將看到一條消息"Hello World"。
調試指南本指南將幫助你入門調試Node.js應用程序和腳本。
啟用Inspector當使用--inspect開關啟動時,Node.js進程通過WebSockets監聽Inspector Protocol定義的診斷命令,默認情況下主機和端口127.0.0.1:9229,還為每個進程分配了唯一的UUID(例如,0f2c936f-b1cd-4ac9-aab3-f63b0f33d55e)。
Inspector客戶端必須知道并指定要連接到WebSocket接口的主機地址、端口和UUID,完整的URL是ws://127.0.0.1:9229/0f2c936f-b1cd-4ac9-aab3-f63b0f33d55e,當然取決于實際的主機和端口以及實例的正確UUID。
Inspector還包括一個HTTP端點,用于提供有關調試對象的元數據,包括其WebSocket URL,UUID和Chrome DevTools URL,通過向http://[host:port]/json/list發送HTTP請求來獲取此元數據,這將返回一個JSON對象,如下所示;使用webSocketDebuggerUrl屬性作為URL直接連接到Inspector。
{ "description": "node.js instance", "devtoolsFrontendUrl": "chrome-devtools://devtools/bundled/inspector.html?experiments=true&v8only=true&ws=127.0.0.1:9229/0f2c936f-b1cd-4ac9-aab3-f63b0f33d55e", "faviconUrl": "https://nodejs.org/static/favicon.ico", "id": "0f2c936f-b1cd-4ac9-aab3-f63b0f33d55e", "title": "node", "type": "node", "url": "file://", "webSocketDebuggerUrl": "ws://127.0.0.1:9229/0f2c936f-b1cd-4ac9-aab3-f63b0f33d55e" }
在沒有--inspect的情況下啟動的Node.js進程也可以通過SIGUSR1(在Linux和OS X上)發出信號來指示開始偵聽調試消息,從Node 7開始,這將激活舊版Debugger API,在Node 8及更高版本中,它將激活Inspector API。
安全影響由于調試器具有對Node.js執行環境的完全訪問權限,因此能夠連接到此端口的惡意行為者可以代表Node進程執行任意代碼,了解在公共和專用網絡上公開調試器端口的安全隱患非常重要。
公開公共調試端口是不安全的如果調試器綁定到公共IP地址或0.0.0.0,則任何可以訪問你的IP地址的客戶端都可以無限制地連接到調試器,并且能夠運行任意代碼。
默認情況下,node --inspect綁定到127.0.0.1,如果你打算允許外部連接到調試器,你需要明確提供公共IP地址或0.0.0.0等。這樣做可能會給你帶來潛在的重大安全威脅,我們建議你確保適當的防火墻和訪問控制措施,以防止安全風險。
有關如何安全地允許遠程調試器客戶端連接的一些建議,請參閱“啟用遠程調試方案”一節。
本地應用程序可以完全訪問inspector即使將inspector端口綁定到127.0.0.1(默認值),計算機上本地運行的任何應用程序也將具有不受限制的訪問權限,這是為了讓本地調試器能夠方便地連接。
瀏覽器、WebSockets和同源策略在Web瀏覽器中打開的網站可以在瀏覽器安全模型下進行WebSocket和HTTP請求,需要初始HTTP連接才能獲得唯一的調試器會話ID,同源策略阻止網站建立此HTTP連接,為了防止DNS重新綁定攻擊的其他安全性,Node.js會驗證連接的“主機”標頭是否精確指定了IP地址或localhost或localhost6。
這些安全策略不允許通過指定主機名來連接到遠程調試服務器,你可以通過指定IP地址或使用ssh隧道來解決此限制,如下所述。
Inspector客戶端一些商業和開源工具可以連接到Node的Inspector,這些基本信息如下:
node-inspect
Node.js Foundation支持的CLI調試器,它使用Inspector協議。
一個與Node捆綁在一起的版本,可以與node inspect myscript.js一起使用。
最新版本也可以獨立安裝(例如npm install -g node-inspect),并與node-inspect myscript.js一起使用。
Chrome DevTools 55+
選項1:在基于Chromium的瀏覽器中打開chrome://inspect,點擊配置按鈕,確保列出目標主機和端口。
選項2:從/json/list的輸出(見上文)或--inspect提示文本復制devtoolsFrontendUrl并粘貼到Chrome中。
選項3:安裝Chrome擴展程序NIM(Node Inspector Manager):https://chrome.google.com/webstore/detail/nim-node-inspector-manage/gnhhdgbaldcilmgcpfddgdbkhjohddkj。
Visual Studio Code 1.10+
在Debug面板中,點擊設置圖標以打開.vscode/launch.json,選擇“Node.js”進行初始設置。
Visual Studio 2017
從菜單中選擇“Debug> Start Debugging”或按F5。
詳細說明。
JetBrains WebStorm 2017.1+和其他JetBrains IDE
創建一個新的Node.js調試配置并點擊Debug,對于Node.js 7+,默認情況下將使用--inspect,要禁用,請在IDE Registry中取消選中js.debugger.node.use.inspect。
chrome-remote-interface
用于簡化與Inspector Protocol端點的連接的庫。
命令行選項下表列出了各種運行時標志對調試的影響:
--inspect
啟用inspector代理
監聽默認地址和端口(127.0.0.1:9229)
--inspect=[host:port]
啟用inspector代理
綁定到地址或主機名,host(默認值:127.0.0.1)
監聽端口,port(127.0.0.1:9229)
--inspect-brk
啟用inspector代理
監聽默認地址和端口(127.0.0.1:9229)
在用戶代碼啟動前中斷
--inspect-brk=[host:port]
啟用inspector代理
綁定到地址或主機名,host(默認值:127.0.0.1)
監聽端口,port(127.0.0.1:9229)
在用戶代碼啟動前中斷
node inspect script.js
生成子進程以在--inspect標志下運行用戶腳本,并使用main進程運行CLI調試器。
node inspect --port=xxxx script.js
生成子進程以在--inspect標志下運行用戶腳本,并使用main進程運行CLI調試器。
監聽端口,port(127.0.0.1:9229)
啟用遠程調試方案我們建議你永遠不要讓調試器在公共IP地址上監聽,如果你需要允許遠程調試連接,我們建議使用ssh隧道,我們提供以下示例僅用于說明目的,請在繼續操作之前了解允許遠程訪問特權服務的安全風險。
假設你在遠程計算機remote.example.com上運行Node,你希望能夠進行調試,在該計算機上,你應該啟動node進程,并且inspector僅偵聽localhost(默認值)。
$ node --inspect server.js
現在,在要從中啟動調試客戶端連接的本地計算機上,可以設置ssh隧道:
$ ssh -L 9221:localhost:9229 user@remote.example.com
這將啟動ssh隧道會話,其中與本地計算機上的端口9221的連接將轉發到remote.example.com上的端口9229,你現在可以將調試器(如Chrome DevTools或Visual Studio Code)附加到localhost:9221,它應該能夠調試,就好像Node.js應用程序在本地運行一樣。
遺留調試器從Node 7.7.0開始,遺留調試器已被棄用,請改用--inspect和Inspector。
在版本7及更早版本中使用--debug或--debug-brk開關啟動時,Node.js將偵聽TCP端口上已停用的V8調試協議定義的調試命令,默認情況下為5858,任何使用這個協議的調試器客戶端都可以連接并調試正在運行的進程;下面列出了幾個受歡迎的。
不再維護或記錄V8調試協議。
內置調試器
啟動node debug script_name.js以在Node的內置命令行調試器下啟動腳本,你的腳本在另一個使用--debug-brk選項啟動的Node進程中啟動,初始Node進程運行_debugger.js腳本并連接到你的目標。
node-inspector
使用Chrome DevTools調試Node.js應用程序,使用中間進程將Chromium中使用的Inspector協議轉換為Node.js中使用的V8 Debugger協議。
上一篇:關于Node.js 下一篇:輕松分析Node.js應用程序文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/99174.html
Node.js 指南 Node.js?是基于Chrome的V8 JavaScript引擎構建的JavaScript運行時。 常規 關于Node.js 入門指南 輕松分析Node.js應用程序 Docker化Node.js Web應用程序 遷移到安全的Buffer構造函數 Node.js核心概念 阻塞與非阻塞概述 Node.js事件循環、定時器和process.nextTick() 不要阻塞事...
摘要:如果不熟悉這種語言,有一篇關于阻塞與非阻塞的完整文章。在設計上與的或的等系統類似,并受其影響,進一步采用事件模型。它將事件循環呈現為運行時構造而不是庫,在其他系統中,始終存在阻塞調用以啟動事件循環。上一篇指南目錄下一篇入門指南 關于Node.js 作為異步事件驅動的JavaScript運行時,Node旨在構建可伸縮的網絡應用程序,在下面的hello world示例中,可以同時處理許多連...
摘要:化應用程序此示例的目的是向你展示如何將應用程序放入容器中,該指南旨在用于開發,而不用于生產部署,本指南還假設你有一個有效的安裝,并且基本了解應用程序的結構。 Docker化Node.js Web應用程序 此示例的目的是向你展示如何將Node.js應用程序放入Docker容器中,該指南旨在用于開發,而不用于生產部署,本指南還假設你有一個有效的Docker安裝,并且基本了解Node.js應...
摘要:中的定時器中的模塊包含在一段時間后執行代碼的函數,定時器不需要通過導入,因為所有方法都可以在全局范圍內模擬瀏覽器,要完全了解何時執行定時器功能,最好先閱讀事件循環。 Node.js中的定時器 Node.js中的Timers模塊包含在一段時間后執行代碼的函數,定時器不需要通過require()導入,因為所有方法都可以在全局范圍內模擬瀏覽器JavaScript API,要完全了解何時執行定...
摘要:特意對前端學習資源做一個匯總,方便自己學習查閱參考,和好友們共同進步。 特意對前端學習資源做一個匯總,方便自己學習查閱參考,和好友們共同進步。 本以為自己收藏的站點多,可以很快搞定,沒想到一入匯總深似海。還有很多不足&遺漏的地方,歡迎補充。有錯誤的地方,還請斧正... 托管: welcome to git,歡迎交流,感謝star 有好友反應和斧正,會及時更新,平時業務工作時也會不定期更...
閱讀 2005·2021-09-13 10:23
閱讀 2336·2021-09-02 09:47
閱讀 3798·2021-08-16 11:01
閱讀 1220·2021-07-25 21:37
閱讀 1601·2019-08-30 15:56
閱讀 537·2019-08-30 13:52
閱讀 3132·2019-08-26 10:17
閱讀 2446·2019-08-23 18:17