亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

Node.js 指南(入門指南)

ybak / 3602人閱讀

摘要:調(diào)試指南本指南將幫助你入門調(diào)試應(yīng)用程序和腳本。這樣做可能會給你帶來潛在的重大安全威脅,我們建議你確保適當(dāng)?shù)姆阑饓驮L問控制措施,以防止安全風(fēng)險。不再維護(hù)或記錄調(diào)試協(xié)議。

入門指南

安裝Node之后,讓我們嘗試構(gòu)建我們的第一個Web服務(wù)器,創(chuàng)建名為“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服務(wù)器,訪問http://localhost:3000,你將看到一條消息"Hello World"。

調(diào)試指南

本指南將幫助你入門調(diào)試Node.js應(yīng)用程序和腳本。

啟用Inspector

當(dāng)使用--inspect開關(guān)啟動時,Node.js進(jìn)程通過WebSockets監(jiān)聽Inspector Protocol定義的診斷命令,默認(rèn)情況下主機(jī)和端口127.0.0.1:9229,還為每個進(jìn)程分配了唯一的UUID(例如,0f2c936f-b1cd-4ac9-aab3-f63b0f33d55e)。

Inspector客戶端必須知道并指定要連接到WebSocket接口的主機(jī)地址、端口和UUID,完整的URL是ws://127.0.0.1:9229/0f2c936f-b1cd-4ac9-aab3-f63b0f33d55e,當(dāng)然取決于實際的主機(jī)和端口以及實例的正確UUID。

Inspector還包括一個HTTP端點,用于提供有關(guān)調(diào)試對象的元數(shù)據(jù),包括其WebSocket URL,UUID和Chrome DevTools URL,通過向http://[host:port]/json/list發(fā)送HTTP請求來獲取此元數(shù)據(jù),這將返回一個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進(jìn)程也可以通過SIGUSR1(在Linux和OS X上)發(fā)出信號來指示開始偵聽調(diào)試消息,從Node 7開始,這將激活舊版Debugger API,在Node 8及更高版本中,它將激活I(lǐng)nspector API。

安全影響

由于調(diào)試器具有對Node.js執(zhí)行環(huán)境的完全訪問權(quán)限,因此能夠連接到此端口的惡意行為者可以代表Node進(jìn)程執(zhí)行任意代碼,了解在公共和專用網(wǎng)絡(luò)上公開調(diào)試器端口的安全隱患非常重要。

公開公共調(diào)試端口是不安全的

如果調(diào)試器綁定到公共IP地址或0.0.0.0,則任何可以訪問你的IP地址的客戶端都可以無限制地連接到調(diào)試器,并且能夠運行任意代碼。

默認(rèn)情況下,node --inspect綁定到127.0.0.1,如果你打算允許外部連接到調(diào)試器,你需要明確提供公共IP地址或0.0.0.0等。這樣做可能會給你帶來潛在的重大安全威脅,我們建議你確保適當(dāng)?shù)姆阑饓驮L問控制措施,以防止安全風(fēng)險。

有關(guān)如何安全地允許遠(yuǎn)程調(diào)試器客戶端連接的一些建議,請參閱“啟用遠(yuǎn)程調(diào)試方案”一節(jié)。

本地應(yīng)用程序可以完全訪問inspector

即使將inspector端口綁定到127.0.0.1(默認(rèn)值),計算機(jī)上本地運行的任何應(yīng)用程序也將具有不受限制的訪問權(quán)限,這是為了讓本地調(diào)試器能夠方便地連接。

瀏覽器、WebSockets和同源策略

在Web瀏覽器中打開的網(wǎng)站可以在瀏覽器安全模型下進(jìn)行WebSocket和HTTP請求,需要初始HTTP連接才能獲得唯一的調(diào)試器會話ID,同源策略阻止網(wǎng)站建立此HTTP連接,為了防止DNS重新綁定攻擊的其他安全性,Node.js會驗證連接的“主機(jī)”標(biāo)頭是否精確指定了IP地址或localhostlocalhost6。

這些安全策略不允許通過指定主機(jī)名來連接到遠(yuǎn)程調(diào)試服務(wù)器,你可以通過指定IP地址或使用ssh隧道來解決此限制,如下所述。

Inspector客戶端

一些商業(yè)和開源工具可以連接到Node的Inspector,這些基本信息如下:

node-inspect

Node.js Foundation支持的CLI調(diào)試器,它使用Inspector協(xié)議。

一個與Node捆綁在一起的版本,可以與node inspect myscript.js一起使用。

最新版本也可以獨立安裝(例如npm install -g node-inspect),并與node-inspect myscript.js一起使用。

Chrome DevTools 55+

選項1:在基于Chromium的瀏覽器中打開chrome://inspect,點擊配置按鈕,確保列出目標(biāo)主機(jī)和端口。

選項2:從/json/list的輸出(見上文)或--inspect提示文本復(fù)制devtoolsFrontendUrl并粘貼到Chrome中。

選項3:安裝Chrome擴(kuò)展程序NIM(Node Inspector Manager):https://chrome.google.com/webstore/detail/nim-node-inspector-manage/gnhhdgbaldcilmgcpfddgdbkhjohddkj。

Visual Studio Code 1.10+

Debug面板中,點擊設(shè)置圖標(biāo)以打開.vscode/launch.json,選擇“Node.js”進(jìn)行初始設(shè)置。

Visual Studio 2017

從菜單中選擇“Debug> Start Debugging”或按F5。

詳細(xì)說明。

JetBrains WebStorm 2017.1+和其他JetBrains IDE

創(chuàng)建一個新的Node.js調(diào)試配置并點擊Debug,對于Node.js 7+,默認(rèn)情況下將使用--inspect,要禁用,請在IDE Registry中取消選中js.debugger.node.use.inspect。

chrome-remote-interface

用于簡化與Inspector Protocol端點的連接的庫。

命令行選項

下表列出了各種運行時標(biāo)志對調(diào)試的影響:

--inspect

啟用inspector代理

監(jiān)聽默認(rèn)地址和端口(127.0.0.1:9229)

--inspect=[host:port]

啟用inspector代理

綁定到地址或主機(jī)名,host(默認(rèn)值:127.0.0.1)

監(jiān)聽端口,port(127.0.0.1:9229)

--inspect-brk

啟用inspector代理

監(jiān)聽默認(rèn)地址和端口(127.0.0.1:9229)

在用戶代碼啟動前中斷

--inspect-brk=[host:port]

啟用inspector代理

綁定到地址或主機(jī)名,host(默認(rèn)值:127.0.0.1)

監(jiān)聽端口,port(127.0.0.1:9229)

在用戶代碼啟動前中斷

node inspect script.js

生成子進(jìn)程以在--inspect標(biāo)志下運行用戶腳本,并使用main進(jìn)程運行CLI調(diào)試器。

node inspect --port=xxxx script.js

生成子進(jìn)程以在--inspect標(biāo)志下運行用戶腳本,并使用main進(jìn)程運行CLI調(diào)試器。

監(jiān)聽端口,port(127.0.0.1:9229)

啟用遠(yuǎn)程調(diào)試方案

我們建議你永遠(yuǎn)不要讓調(diào)試器在公共IP地址上監(jiān)聽,如果你需要允許遠(yuǎn)程調(diào)試連接,我們建議使用ssh隧道,我們提供以下示例僅用于說明目的,請在繼續(xù)操作之前了解允許遠(yuǎn)程訪問特權(quán)服務(wù)的安全風(fēng)險。

假設(shè)你在遠(yuǎn)程計算機(jī)remote.example.com上運行Node,你希望能夠進(jìn)行調(diào)試,在該計算機(jī)上,你應(yīng)該啟動node進(jìn)程,并且inspector僅偵聽localhost(默認(rèn)值)。

$ node --inspect server.js

現(xiàn)在,在要從中啟動調(diào)試客戶端連接的本地計算機(jī)上,可以設(shè)置ssh隧道:

$ ssh -L 9221:localhost:9229 user@remote.example.com

這將啟動ssh隧道會話,其中與本地計算機(jī)上的端口9221的連接將轉(zhuǎn)發(fā)到remote.example.com上的端口9229,你現(xiàn)在可以將調(diào)試器(如Chrome DevTools或Visual Studio Code)附加到localhost:9221,它應(yīng)該能夠調(diào)試,就好像Node.js應(yīng)用程序在本地運行一樣。

遺留調(diào)試器

從Node 7.7.0開始,遺留調(diào)試器已被棄用,請改用--inspect和Inspector。

在版本7及更早版本中使用--debug--debug-brk開關(guān)啟動時,Node.js將偵聽TCP端口上已停用的V8調(diào)試協(xié)議定義的調(diào)試命令,默認(rèn)情況下為5858,任何使用這個協(xié)議的調(diào)試器客戶端都可以連接并調(diào)試正在運行的進(jìn)程;下面列出了幾個受歡迎的。

不再維護(hù)或記錄V8調(diào)試協(xié)議。

內(nèi)置調(diào)試器

啟動node debug script_name.js以在Node的內(nèi)置命令行調(diào)試器下啟動腳本,你的腳本在另一個使用--debug-brk選項啟動的Node進(jìn)程中啟動,初始Node進(jìn)程運行_debugger.js腳本并連接到你的目標(biāo)。

node-inspector

使用Chrome DevTools調(diào)試Node.js應(yīng)用程序,使用中間進(jìn)程將Chromium中使用的Inspector協(xié)議轉(zhuǎn)換為Node.js中使用的V8 Debugger協(xié)議。

上一篇:關(guān)于Node.js 下一篇:輕松分析Node.js應(yīng)用程序

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/99174.html

相關(guān)文章

  • Node.js 指南(目錄)

    Node.js 指南 Node.js?是基于Chrome的V8 JavaScript引擎構(gòu)建的JavaScript運行時。 常規(guī) 關(guān)于Node.js 入門指南 輕松分析Node.js應(yīng)用程序 Docker化Node.js Web應(yīng)用程序 遷移到安全的Buffer構(gòu)造函數(shù) Node.js核心概念 阻塞與非阻塞概述 Node.js事件循環(huán)、定時器和process.nextTick() 不要阻塞事...

    未東興 評論0 收藏0
  • Node.js 指南(關(guān)于Node.js

    摘要:如果不熟悉這種語言,有一篇關(guān)于阻塞與非阻塞的完整文章。在設(shè)計上與的或的等系統(tǒng)類似,并受其影響,進(jìn)一步采用事件模型。它將事件循環(huán)呈現(xiàn)為運行時構(gòu)造而不是庫,在其他系統(tǒng)中,始終存在阻塞調(diào)用以啟動事件循環(huán)。上一篇指南目錄下一篇入門指南 關(guān)于Node.js 作為異步事件驅(qū)動的JavaScript運行時,Node旨在構(gòu)建可伸縮的網(wǎng)絡(luò)應(yīng)用程序,在下面的hello world示例中,可以同時處理許多連...

    Java_oldboy 評論0 收藏0
  • Node.js 指南(Docker化Node.js Web應(yīng)用程序)

    摘要:化應(yīng)用程序此示例的目的是向你展示如何將應(yīng)用程序放入容器中,該指南旨在用于開發(fā),而不用于生產(chǎn)部署,本指南還假設(shè)你有一個有效的安裝,并且基本了解應(yīng)用程序的結(jié)構(gòu)。 Docker化Node.js Web應(yīng)用程序 此示例的目的是向你展示如何將Node.js應(yīng)用程序放入Docker容器中,該指南旨在用于開發(fā),而不用于生產(chǎn)部署,本指南還假設(shè)你有一個有效的Docker安裝,并且基本了解Node.js應(yīng)...

    李世贊 評論0 收藏0
  • Node.js 指南Node.js中的定時器)

    摘要:中的定時器中的模塊包含在一段時間后執(zhí)行代碼的函數(shù),定時器不需要通過導(dǎo)入,因為所有方法都可以在全局范圍內(nèi)模擬瀏覽器,要完全了解何時執(zhí)行定時器功能,最好先閱讀事件循環(huán)。 Node.js中的定時器 Node.js中的Timers模塊包含在一段時間后執(zhí)行代碼的函數(shù),定時器不需要通過require()導(dǎo)入,因為所有方法都可以在全局范圍內(nèi)模擬瀏覽器JavaScript API,要完全了解何時執(zhí)行定...

    econi 評論0 收藏0
  • 前端資源系列(4)-前端學(xué)習(xí)資源分享&前端面試資源匯總

    摘要:特意對前端學(xué)習(xí)資源做一個匯總,方便自己學(xué)習(xí)查閱參考,和好友們共同進(jìn)步。 特意對前端學(xué)習(xí)資源做一個匯總,方便自己學(xué)習(xí)查閱參考,和好友們共同進(jìn)步。 本以為自己收藏的站點多,可以很快搞定,沒想到一入?yún)R總深似海。還有很多不足&遺漏的地方,歡迎補(bǔ)充。有錯誤的地方,還請斧正... 托管: welcome to git,歡迎交流,感謝star 有好友反應(yīng)和斧正,會及時更新,平時業(yè)務(wù)工作時也會不定期更...

    princekin 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<