什麼是Node.js以及為什麼要使用它

什麼是Node.js以及為什麼要使用它
JavaScript是世界上最流行的程式語言之一。今天,它為數百萬個網站提供支援,並吸引了成群的開發人員和設計人員為Web構建功能。如果您是程式設計新手,那麼 JavaScript很容易成為最適合您的程式語言之一。

在最初的20年裡,JavaScript主要用於客戶端指令碼。由於JavaScript只能在<script>標籤內使用,因此開發人員必須在前端和後端元件之間使用多種語言和框架。後來出現了Node.js,它是一個執行時環境,包括執行用JavaScript編寫的程式所需的一切。

Node.js是一個單執行緒、開源、跨平臺的執行時環境,用於構建快速且可擴充套件的伺服器端和網路應用程式。它執行在V8 JavaScript執行時引擎上,它使用事件驅動的非阻塞I/O架構,這使其高效且適用於實時應用程式。

  1. Node.js架構及其工作原理
  2. Node.js的特點
  3. 市場規模
  4. Node.js的應用
  5. Node.js是一種程式語言嗎?
  6. Node.js是前端還是後端?
  7. Node.js入門
  8. 如何安裝Node.js
  9. 檢查安裝的Node.js版本
  10. 什麼是NPM?
  11. Node.js中的你好世界
  12. 使用Express建立伺服器

Node.js是用什麼寫的?

Node.js是用C、C++和JavaScript編寫的。

維基百科將Node.js定義為“Google的V8 JavaScript引擎、libuv平臺抽象層和核心庫的打包編譯,它本身主要用JavaScript編寫。”

執行時內部使用Chrome V8,它是JavaScript執行引擎,它也是用C++編寫的。這為Node.js的所有功能新增了額外的用例,例如訪問內部系統功能(如網路)。

Node.js架構及其工作原理

Node.js使用“單執行緒事件迴圈”架構同時處理多個客戶端。要了解這與其他執行時有何不同,我們需要了解如何用Java等語言處理多執行緒併發客戶端。

在多執行緒請求-響應模型中,多個客戶端傳送一個請求,伺服器在返回響應之前處理每個請求。但是,使用多個執行緒來處理併發呼叫。這些執行緒被定義在一個執行緒池中,每次有請求進來時,都會分配一個單獨的執行緒來處理它。

 

 

node.js如何使用事件迴圈處理傳入請求

node.js如何使用事件迴圈處理傳入請求

Node.js的工作方式不同。讓我們來看看它經歷的每一步:

  1. Node.js維護一個有限的執行緒池來服務請求。
  2. 每當請求到來時,Node.js都會將其放入佇列中。
  3. 現在,單執行緒“事件迴圈”——核心元件——出現了。此事件迴圈無限期地等待請求。
  4. 當一個請求進來時,迴圈從佇列中取出它並檢查它是否需要阻塞輸入/輸出(I/O)操作。如果不是,它會處理請求併傳送響應。
  5. 如果請求有阻塞操作要執行,事件迴圈會從內部執行緒池中分配一個執行緒來處理請求。可用的內螺紋數量有限。這組輔助執行緒稱為工作組。
  6. 事件迴圈跟蹤阻塞請求,並在處理阻塞任務後將它們放入佇列中。這就是它保持其非阻塞性質的方式。

由於Node.js使用更少的執行緒,它使用更少的資源/記憶體,從而更快地執行任務。所以就我們的目的而言,這種單執行緒架構相當於多執行緒架構。當需要處理資料密集型任務時,使用Java等多執行緒語言會更有意義。但對於實時應用程式,Node.js是顯而易見的選擇。

Node.js的特點

Node.js在過去幾年中發展迅速。這要歸功於它提供的大量功能列表:

  1. 簡單——Node.js很容易上手。它是Web開發初學者的首選。擁有大量教程和龐大的社羣——入門非常容易。
  2. 可擴充套件性——它為應用程式提供了巨大的可擴充套件性。Node.js是單執行緒的,能夠以高吞吐量處理大量同時連線。
  3. 速度——非阻塞執行緒執行使Node.js更快、更高效。
  4. 包(Packages)——提供了大量的開源Node.js包,可以簡化您的工作。目前NPM生態系統中有超過一百萬個包。
  5. 強大的後端——Node.js是用C和C++編寫的,這使其速度更快,並新增了網路支援等功能。
  6. 多平臺——跨平臺支援允許您使用Node.js建立SaaS網站、桌面應用程式甚至移動應用程式。
  7. 可維護——Node.js對於開發人員來說是一個簡單的選擇,因為前端和後端都可以使用JavaScript作為單一語言進行管理。

市場規模

在過去的2年裡,網站有了巨大的增長,正如預期的那樣,Node.js也在快速增長。早在2018年,流行的執行時就已經超過了10億次下載門檻,據W3Techs稱,Node.js被全球所有網站的1.2%使用。網際網路上的站點總數超過2000萬個。

毫不奇怪,它也是數百萬公司的熱門選擇。以下是當今使用Node.js的一些流行的:

  • Twitter
  • Spotify
  • eBay
  • Reddit
  • LinkedIn
  • Godaddy

Node.js的應用

Node.js的應用

Node.js的應用

Node.js用於各種各樣的應用程式。讓我們探索一些流行的用例,其中Node.js是一個不錯的選擇:

  1. 實時聊天——由於其單執行緒非同步特性,Node.js非常適合處理實時通訊。它可以輕鬆擴充套件,並且經常用於構建聊天機器人。Node.js還可以輕鬆構建其他聊天功能,例如多人聊天和推送通知。
  2. 物聯網——物聯網應用程式通常包含多個感測器,因為它們經常傳送可以堆積成大量請求的小塊資料。Node.js是一個不錯的選擇,因為它能夠快速處理這些併發請求。
  3. 資料流式傳輸——Netflix等公司使用Node.js進行流式傳輸。這主要是因為Node.js是輕量級和快速的,此外Node.js還提供了一個原生的流API。這些流允許使用者通過管道相互傳送請求,從而將資料直接流式傳輸到其最終目的地。
  4. 複雜的單頁應用程式 (SPA) — 在SPA中,整個應用程式載入在一個頁面中。這通常意味著在後臺對特定元件發出了幾個請求。Node.js的事件迴圈在這裡發揮了作用,因為它以非阻塞方式處理請求。
  5. 基於REST API的應用程式——JavaScript用於站點的前端和後端。因此,伺服器可以使用Node.js通過REST API輕鬆地與前端通訊。Node.js還提供了諸如Express.js和Koa之類的包,使構建Web應用程式變得更加容易。

Node.js是一種程式語言嗎?

一句話:沒有

Node.js不是一種程式語言。相反,它是一個執行時環境,用於在瀏覽器之外執行JavaScript。

Node.js也不是一個框架(用於開發軟體應用程式的平臺)。Node.js執行時構建在一種程式語言(在本例中為JavaScript)之上,並有助於執行框架本身。

綜上所述,Node.js既不是程式語言也不是框架;這是他們的環境。

Node.js是前端還是後端?

開發人員的一個常見誤解是Node.js是一個後端框架,僅用於構建伺服器。這不是真的:Node.js可以在前端和後端使用。

Node.js框架成為構建靈活和可擴充套件後端的開發人員的熱門選擇的原因之一是它的事件驅動、非阻塞特性。但是,前端開發人員會在他們自己的工作中清楚地看到 Node.js的這些好處。

讓我們來看看為什麼Node.js同時適用於後端和前端:

  1. 可重用性——JavaScript是一種通用語言,用於在Express.js和Meteor.js等框架的幫助下編寫後端和前端。一些流行的堆疊,例如MERN,使用Express.js作為後端(一個Node.js框架)。多個元件也可以在前端和後端之間重用。
  2. 生產力和開發人員效率——由於減少了多種語言之間的上下文切換,可以節省大量的開發人員時間。後端和前端都使用JavaScript可以提高效率,因為許多工具對兩者都是通用的。
  3. 龐大的社羣——蓬勃發展的線上社羣是成功開發週期的速度因素。當您遇到問題時,很有可能有人已經解決了它並在Stack Overflow上分享瞭解決方案。Node.js充分利用了這個社羣,當涉及到流行的執行時及其包時,這個社羣非常活躍和參與。

Node.js入門

決定從哪裡開始使用Node.js可能會讓人不知所措。幸運的是,它安裝起來很簡單,然後您就可以自己試駕了。

如何安裝Node.js

如果您已經安裝了Node.js,請隨意跳過本節。

在macOS上

在Mac上使用 Bash

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
curl "https://nodejs.org/dist/latest/node-${VERSION:-$(wget -qO- https://nodejs.org/dist/latest/ | sed -nE 's|.*>node-(.*)\.pkg.*|\1|p')}.pkg" > "$HOME/Downloads/node-latest.pkg" && sudo installer -store -pkg "$HOME/Downloads/node-latest.pkg" -target "/"
curl "https://nodejs.org/dist/latest/node-${VERSION:-$(wget -qO- https://nodejs.org/dist/latest/ | sed -nE 's|.*>node-(.*)\.pkg.*|\1|p')}.pkg" > "$HOME/Downloads/node-latest.pkg" && sudo installer -store -pkg "$HOME/Downloads/node-latest.pkg" -target "/"
curl "https://nodejs.org/dist/latest/node-${VERSION:-$(wget -qO- https://nodejs.org/dist/latest/ | sed -nE 's|.*>node-(.*)\.pkg.*|\1|p')}.pkg" > "$HOME/Downloads/node-latest.pkg" && sudo installer -store -pkg "$HOME/Downloads/node-latest.pkg" -target "/"

在Mac上使用 Homebrew

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
brew install node
brew install node
brew install node

在Windows上

直接從nodejs.org網站下載Windows安裝程式

在Linux上

在Ubuntu 18.04+上,您可以使用以下命令安裝 Node。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
sudo apt update
sudo apt install nodejs
sudo apt update sudo apt install nodejs
sudo apt update
sudo apt install nodejs

檢查安裝的Node.js版本

在上一節中,我們成功安裝了Node.js。讓我們通過檢查安裝的版本來驗證它。在終端中執行以下命令。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
node -v
node -v
node -v

您也可以通過較長的標誌檢查它

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
node --version
node --version
node --version

您應該會看到與此類似的輸出。雖然版本號可能會有所不同。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
v14.16.0
v14.16.0
v14.16.0

什麼是NPM?

NPM是Node.js的包生態系統。它是世界上所有開源庫中最大的生態系統,擁有超過100萬個軟體包並且還在不斷增長。NPM是免費使用的,每天都有成千上萬的開源開發人員為它做出貢獻。

NPM帶有一個開箱即用的命令列實用程式。您可以直接前往NPM網站搜尋您需要的包,然後使用單個命令進行安裝。您還可以通過此命令列實用程式管理包的版本、檢視依賴項,甚至在專案中設定自定義指令碼。毫無疑問,NPM是Node.js社羣最受歡迎的財產;Node.js吸引了大量開發人員,主要是由於其出色的包支援。

通過CLI 安裝NPM包

安裝Node.js時,會自動安裝NPM。我們在前面的章節中介紹瞭如何安裝Node.js,所以現在讓我們看一下使用NPM安裝包的命令:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
npm install <package-name>
npm install <package-name>
npm install <package-name>

是的,就是這麼簡單!你甚至可以一次安裝多個包:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
npm install <pkg-1> <pkg-2> <pkg-3>
npm install <pkg-1> <pkg-2> <pkg-3>
npm install <pkg-1> <pkg-2> <pkg-3>

如果要在全域性上下文中安裝包,還可以指定-g (global)標誌。這使您可以在機器上的任何地方使用該軟體包。

當你初始化一個新的應用程式時,NPM會自動建立一個包含所有NPM包的package.json檔案。在這裡,您可以指定版本、依賴項和自定義指令碼。

NPM實用程式附帶一長串命令,包括publishauditrun等。您可以使用命令npm help檢查如何使用這些。

節點和npm版本

節點和npm版本

以下是當今一些最受歡迎的Node.js包:

  • Express – Express.js,或簡稱Express,是受Sinatra啟發的Node.js Web開發框架,也是當今大多數Node.js應用程式的事實標準。
  • MongoDB – MongoDB的官方驅動程式。它為Node.js中的MongoDB物件資料庫提供API。
  • Socket.io – Socket支援實時、雙向和基於事件的通訊。
  • Lodash – Lodash使JavaScript更容易,因為它消除了使用陣列、數字、物件、字串等的麻煩。
  • Moment – 用於解析、驗證、操作和格式化日期的JavaScript日期庫。
  • Commander.js – 這是您使用node.js的命令列介面工作和構建所需的全部內容。
  • Forever – 一個簡單的CLI工具,用於確保給定指令碼連續執行(即永遠)。面對任何意外故障,讓您的Node.js程序在生產中保持正常執行。
  • Async – 一個實用模組,為使用非同步JavaScript提供簡單、強大的功能。
  • Redis – 支援Redis資料庫整合的客戶端庫。
  • Mocha – 適用於Node.js和瀏覽器的乾淨、靈活的JavaScript測試框架。
  • Passport – Node.js的簡單、不顯眼的身份驗證。Passport的唯一目的是驗證請求。

Node.js中的你好世界

和往常一樣,讓我們​​從基本的“Hello World”程式開始,我們在Node.js中建立一個伺服器,它將在伺服器請求中返回“Hello World”輸出。在你開始之前,一定要為自己設定一個好的文字編輯器

開啟文字編輯器後,下面是您將用於“Hello World”程式的程式碼:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
// server.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! Welcome to Node.js');
});
server.listen(port, hostname, () => {
console.log(`Server running at http://${hostname}:${port}/`);
});
// server.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! Welcome to Node.js'); }); server.listen(port, hostname, () => { console.log(`Server running at http://${hostname}:${port}/`); });
// server.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! Welcome to Node.js');
});
server.listen(port, hostname, () => {
console.log(`Server running at http://${hostname}:${port}/`);
});

將此檔案儲存為“server.js”。現在前往終端並使用以下命令啟動伺服器:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
node server.js
node server.js
node server.js

伺服器現在應該開始執行。要驗證輸出,請在瀏覽器中開啟http://localhost:3000 。你應該會看到訊息——

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
Hello World! Welcome to Node.js
Hello World! Welcome to Node.js
Hello World! Welcome to Node.js

Hello World伺服器說明

Node.js帶有一個名為“HTTP”的內建模組,它允許Node.js通過超文字傳輸​​協議 (HTTP)傳輸資料。

在上面的程式碼中,我們首先在程式中載入http模組。然後我們使用createServer方法接受請求並返回帶有狀態碼的響應。最後,我們在定義的埠進行監聽。

恭喜——你剛剛在Node.js中建立了你的第一個伺服器!在下一節中,我們將學習如何使用Express框架來建立伺服器。

使用Express建立伺服器

首先,我們應該討論什麼是伺服器。伺服器負責通過其軟體(最常見的是Apache或Nginx)接收客戶端請求,執行所需的一組任務,最後將響應傳送回客戶端。Express是一個可以幫助我們在Node.js中建立伺服器的框架。

Express.js是一個最小且靈活的Node.js Web應用程式框架,它為Web和移動應用程式提供了一組強大的功能。它允許在您的應用程式中新增路由表和設定中介軟體。您可以使用以下命令安裝Express。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
npm install express --save
npm install express --save
npm install express --save

在上一節中,我們使用了內建的http實用程式來建立伺服器。現在,讓我們使用Express.js建立一個“Hello World”伺服器。

開啟您的文字編輯器並輸入以下程式碼:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
// server-express.js
const express = require('express')
const app = express() // initialize app
const port = 3000
// GET callback function returns a response message
app.get('/', (req, res) => {
res.send('Hello World! Welcome to Node.js')
})
app.listen(port, () => {
console.log(`Server listening at http://localhost:${port}`)
})
// server-express.js const express = require('express') const app = express() // initialize app const port = 3000 // GET callback function returns a response message app.get('/', (req, res) => { res.send('Hello World! Welcome to Node.js') }) app.listen(port, () => { console.log(`Server listening at http://localhost:${port}`) })
// server-express.js
const express = require('express')
const app = express() // initialize app
const port = 3000
// GET callback function returns a response message
app.get('/', (req, res) => {
res.send('Hello World! Welcome to Node.js')
})
app.listen(port, () => {
console.log(`Server listening at http://localhost:${port}`)
})

接下來,我們將使用以下命令執行我們的伺服器。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
node server-express.js
node server-express.js
node server-express.js

現在在瀏覽器中檢查http://localhost:3000以檢視“Hello World”輸出。

小結

簡而言之,Node.js是一種流行的程式設計環境,可用於構建需要支援多個併發請求的大規模應用程式。單執行緒非阻塞I/O也使其成為實時和資料流應用程式的絕佳選擇。

更重要的是,Node.js擁有龐大的活躍開發者社羣,並擁有世界上最大的開源包儲存庫NPM,目前包含超過一百萬個包。

開始使用Node.js很容易。我們已經介紹瞭如何在Node.js中安裝和建立伺服器,所以剩下的就是考慮如何在自己的堆疊中使用和實現Node.js。您還可以通過訪問nodejs.dev上的官方Node.js文件來擴充套件您的知識。

評論留言