成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Node.js 指南(入門指南)

ybak / 3563人閱讀

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

入門指南

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

調(diào)試指南

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

啟用Inspector

當(dāng)使用--inspect開關(guān)啟動(dòng)時(shí),Node.js進(jìn)程通過WebSockets監(jiān)聽I(yíng)nspector Protocol定義的診斷命令,默認(rèn)情況下主機(jī)和端口127.0.0.1:9229,還為每個(gè)進(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)然取決于實(shí)際的主機(jī)和端口以及實(shí)例的正確UUID。

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

安全影響

由于調(diào)試器具有對(duì)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)試器,并且能夠運(yùn)行任意代碼。

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

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

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

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

瀏覽器、WebSockets和同源策略

在Web瀏覽器中打開的網(wǎng)站可以在瀏覽器安全模型下進(jìn)行WebSocket和HTTP請(qǐng)求,需要初始HTTP連接才能獲得唯一的調(diào)試器會(huì)話ID,同源策略阻止網(wǎng)站建立此HTTP連接,為了防止DNS重新綁定攻擊的其他安全性,Node.js會(huì)驗(yàn)證連接的“主機(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é)議。

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

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

Chrome DevTools 55+

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

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

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

Visual Studio Code 1.10+

Debug面板中,點(diǎn)擊設(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)建一個(gè)新的Node.js調(diào)試配置并點(diǎn)擊Debug,對(duì)于Node.js 7+,默認(rèn)情況下將使用--inspect,要禁用,請(qǐng)?jiān)贗DE Registry中取消選中js.debugger.node.use.inspect。

chrome-remote-interface

用于簡(jiǎn)化與Inspector Protocol端點(diǎn)的連接的庫(kù)。

命令行選項(xiàng)

下表列出了各種運(yùn)行時(shí)標(biāo)志對(duì)調(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)

在用戶代碼啟動(dòng)前中斷

--inspect-brk=[host:port]

啟用inspector代理

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

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

在用戶代碼啟動(dòng)前中斷

node inspect script.js

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

node inspect --port=xxxx script.js

生成子進(jìn)程以在--inspect標(biāo)志下運(yùn)行用戶腳本,并使用main進(jìn)程運(yù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隧道,我們提供以下示例僅用于說明目的,請(qǐng)?jiān)诶^續(xù)操作之前了解允許遠(yuǎn)程訪問特權(quán)服務(wù)的安全風(fēng)險(xiǎn)。

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

$ node --inspect server.js

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

$ ssh -L 9221:localhost:9229 [email protected]

這將啟動(dòng)ssh隧道會(huì)話,其中與本地計(jì)算機(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)用程序在本地運(yùn)行一樣。

遺留調(diào)試器

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

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

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

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

啟動(dòng)node debug script_name.js以在Node的內(nèi)置命令行調(diào)試器下啟動(dòng)腳本,你的腳本在另一個(gè)使用--debug-brk選項(xiàng)啟動(dòng)的Node進(jìn)程中啟動(dòng),初始Node進(jìn)程運(yù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)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/99174.html

相關(guān)文章

  • Node.js 指南(目錄)

    Node.js 指南 Node.js?是基于Chrome的V8 JavaScript引擎構(gòu)建的JavaScript運(yùn)行時(shí)。 常規(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)、定時(shí)器和process.nextTick() 不要阻塞事...

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

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

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

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

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

    摘要:中的定時(shí)器中的模塊包含在一段時(shí)間后執(zhí)行代碼的函數(shù),定時(shí)器不需要通過導(dǎo)入,因?yàn)樗蟹椒ǘ伎梢栽谌址秶鷥?nèi)模擬瀏覽器,要完全了解何時(shí)執(zhí)行定時(shí)器功能,最好先閱讀事件循環(huán)。 Node.js中的定時(shí)器 Node.js中的Timers模塊包含在一段時(shí)間后執(zhí)行代碼的函數(shù),定時(shí)器不需要通過require()導(dǎo)入,因?yàn)樗蟹椒ǘ伎梢栽谌址秶鷥?nèi)模擬瀏覽器JavaScript API,要完全了解何時(shí)執(zhí)行定...

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

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

    princekin 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<