這篇文章是關於 Node.js 的入門指南,Node.js 是一個運行在伺服器端的 JavaScript 執行環境。Node.js 是建立在 Google Chrome V8 JavaScript 引擎之上,主要用於建立網頁伺服器,但不僅限於此。

Node.js 是一個在伺服器上運行的 JavaScript 執行環境。

Node.js 是開源的、跨平台的,自從在2009年推出以來,它已經變得非常流行,現在在網頁開發中扮演著重要的角色。如果以 GitHub 上的 stars 數量作為流行度指標,擁有58000+ stars就意味著非常受歡迎。

Node.js 運行 V8 JavaScript 引擎,該引擎是 Google Chrome 的核心,而 Node.js 可以利用使 Chrome JavaScript 執行時非常高速的工程師的工作,這使得 Node.js 可以受益於巨大的性能改進和即時編譯。由於這一點,運行在 Node.js 中的 JavaScript 代碼可以非常高效。

Node.js 的應用程式由單個進程運行,不為每個請求創建新的線程。Node.js 的標準庫提供了一組異步 I/O 原語,可以防止 JavaScript 代碼阻塞,通常情況下 Node.js 的庫都是使用非阻塞的範例來編寫,使得阻塞行為成為異常而不是正常行為。

當 Node.js 需要執行 I/O 操作,例如從網絡讀取、訪問數據庫或文件系統時,Node.js 不會阻塞線程,而是在響應返回時恢復操作,而不會浪費 CPU 執行週期等待。

這使得 Node.js 可以在單個服務器上處理數千個並發連接,而不引入管理線程並發性的負擔,這將是一個主要的錯誤源。

Node.js 具有獨特的優勢,因為現在數百萬的前端開發人員可以在不需要學習完全不同的語言的情況下運行服務器端代碼和前端代碼。

在 Node.js 中,新的 ECMAScript 標準可以無問題地使用,因為不需要等待所有用戶更新他們的瀏覽器 - 你可以通過更改 Node.js 版本來決定使用哪個 ECMAScript 版本,並且還可以通過運行 Node 並使用標誌來啟用特定的實驗性功能。

Node.js 有大量的函式庫

npm 以其簡單的結構有助於 node.js 生態系的繁榮,現在 npm 註冊表上已經托管了近 50 萬個開源包,您可以自由使用這些包。

一個 Node.js 應用程式的例子

Node.js 最常見的 Hello World 例子是一個網頁伺服器:

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\n')
})

server.listen(port, hostname, () => {
console.log(`Server running at http://${hostname}:${port}/`)
})

要運行這段程式碼,將其保存為 server.js 文件,在終端中運行 node server.js

這段程式碼首先包含了 Node.js 的 http 模組

Node.js 具有驚人的標準庫,包括對網絡的支持。

httpcreateServer() 方法創建一個新的 HTTP 伺服器並返回它。

將伺服器設置為在指定的埠和主機名上監聽。當伺服器準備好時,將調用回調函式,此例中通知我們伺服器正在運行。

每當接收到新請求時,將調用 request 的事件,並提供兩個對象:一個請求(一個 http.IncomingMessage 對象)和一個響應(一個 http.ServerResponse 對象)。

這兩個對象對於處理 HTTP 請求是必不可少的。

第一個對象提供了請求的詳細信息。在這個簡單的例子中,這個對象沒有被使用,但您可以訪問請求標頭和請求數據。

第二個對象用於將數據返回給呼叫者。

在這個例子中,我們將

res.statusCode = 200

將 statusCode 設置為 200,以指示成功響應。

我們設置 Content-Type 標頭:

res.setHeader('Content-Type', 'text/plain')

並且我們使用 end() 將響應關閉,並將內容作為參數添加到 end()

res.end('Hello World\n')

Node.js 框架和工具

Node.js 是一個低級平台,為了使開發人員更容易和更有趣,上面建立了幾千個庫。

其中一些庫隨著時間的推移成為熱門選項。以下是我認為非常重要且值得學習的部分(這是一個非全面的列表):

  • Express,一種最簡單但功能強大的創建網頁伺服器的方式。它的極簡主義、不具指導性且關注伺服器的核心特性是其成功的關鍵。
  • Meteor,一個非常強大的全棧框架,使您能夠使用 JavaScript 以同樣的方式在客戶端和伺服器端構建應用程式,並在客戶端和伺服器端共享代碼。曾經是一個完全成品的工具,現在與前端庫 React、Vue 和 Angular 集成。也可以用於創建移動應用程式。
  • koa,由 Express 團隊創建,旨在更簡單更小,建立在多年的知識之上。新的項目是在不破壞現有社區的情況下進行不可兼容的更改而產生的。
  • Next.js,用於呈現服務器端渲染的React應用程式的框架。
  • Micro,非常輕量級的伺服器,用於創建異步 HTTP 微服務。
  • Socket.io,建立網絡應用程式的實時通信引擎。