Node.js 簡介
Node.js 是一個開源與跨平臺的 JavaScript 執行時環境。 它是一個可用於幾乎任何專案的流行工具!
Node.js 在瀏覽器外執行 V8 JavaScript 引擎(Google Chrome 的核心)。 這使 Node.js 表現得非常出色。
Node.js 應用程式運行於單個程序中,無需為每個請求建立新的執行緒。 Node.js 在其標準庫中提供了一組非同步的 I/O 原生功能(用以防止 JavaScript 程式碼被阻塞),並且 Node.js 中的庫通常是使用非阻塞的方式編寫的(從而使阻塞行為成為例外而不是規範)
當 Node.js 執行 I/O 操作時(例如從網路讀取、訪問資料庫或檔案系統),Node.js 會在響應返回時恢復操作,而不是阻塞執行緒並浪費 CPU 迴圈等待。
這使 Node.js 可以在一臺伺服器上處理數千個併發連線,而無需引入管理執行緒併發的負擔(這可能是重大 bug 的來源)。
Node.js 具有獨特的優勢,因為為瀏覽器編寫 JavaScript 的數百萬前端開發者現在除了客戶端程式碼之外還可以編寫伺服器端程式碼,而無需學習完全不同的語言。
在 Node.js 中,可以毫無問題地使用新的 ECMAScript 標準,因為不必等待所有使用者更新其瀏覽器,你可以通過更改 Node.js 版本來決定要使用的 ECMAScript 版本,並且還可以通過執行帶有標誌的 Node.js 來啟用特定的實驗中的特性。
大量的庫
npm 的簡單結構有助於 Node.js 生態系統的激增,現在 npm 倉庫託管了超過 1,000,000 個可以自由使用的開源庫包。
Node.js 應用程式的示例
Node.js 最常見的 Hello World 示例是 Web 伺服器:
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('你好世界\n') }) server.listen(port, hostname, ()=> { console.log(`伺服器執行在 http://${hostname}:${port}/`) })
此程式碼首先引入了 Node.jshttp
模組。
Node.js 具有出色的標準庫,包括對網路的一流支援。
http
的createServer()
方法會建立新的 HTTP 伺服器並返回它。
伺服器被設定為監聽指定的埠和主機名。 當伺服器就緒後,回撥函式會被呼叫,在此示例中會通知我們伺服器正在執行。
每當接收到新的請求時,request
事件會被呼叫,並提供兩個物件:一個請求(http.IncomingMessage
物件)和一個響應(http.ServerResponse
物件)。
這兩個物件對於處理 HTTP 呼叫至關重要。
第一個物件提供了請求的詳細資訊。 在這個簡單的示例中沒有使用它,但是你可以訪問請求頭和請求資料。
第二個物件用於返回資料給呼叫方。
在此示例中:
res.statusCode = 200
設定 statusCode 屬性為 200,以表明響應成功。
設定 Content-Type 響應頭:
res.setHeader('Content-Type', 'text/plain')
關閉響應,新增內容作為end()
的引數:
res.end('你好世界\n')
Node.js 框架和工具
Node.js 是一個底層的平臺。 為了使開發者做事變得容易又來勁,社群在 Node.js 上構建了數千個庫。
久而久之,其中許多已成為受歡迎的選擇。 以下是一些值得學習的清單:
- AdonisJs: 一個全棧框架,高度專注於開發者的效率、穩定和信任。 Adonis 是最快的 Node.js Web 框架之一。
- Express: 提供了建立 Web 伺服器的最簡單但功能最強大的方法之一。 它的極簡主義方法,專注於伺服器的核心功能,是其成功的關鍵。
- Fastify: 一個 Web 框架,高度專注於提供最佳的開發者體驗(以最少的開銷和強大的外掛架構)。 Fastify 是最快的 Node.js Web 框架之一。
- Gatsby: 一個基於React、由GraphQL驅動的靜態網站生成器,具有非常豐富的外掛和啟動器生態系統。
- hapi: 一個富框架,用於構建應用程式和服務,使開發者可以專注於編寫可重用的應用程式邏輯,而不必花費時間來搭建基礎架構。
- koa: 由 Express 背後的同一個團隊構建,旨在變得更簡單更輕巧。 新專案的誕生是為了滿足建立不相容的更改而又不破壞現有社群。
- Loopback.io: 使構建需要複雜整合的現代應用程式變得容易。
- Meteor: 一個強大的全棧框架,以同構的方式使用 JavaScript 構建應用(在客戶端和伺服器上共享程式碼)。 曾經是提供所有功能的現成工具,現在可以與前端庫React,Vue和Angular整合。 也可以用於建立移動應用。
- Micro: 提供了一個非常輕量級的伺服器,用於建立非同步的 HTTP 微服務。
- NestJS: 一個基於 TypeScript 的漸進式 Node.js 框架,用於構建企業級的高效、可靠和可擴充套件的伺服器端應用程式。
- Next.js: 一個React框架,可為你提供生產所需的所有功能的最佳開發者體驗:混合靜態和伺服器渲染、TypeScript 支援、智慧捆綁、路由預取等。
- Nx: 使用 NestJS、Express、React、Angular等進行全棧開發的工具包! Nx 有助於將開發工作從一個團隊(構建一個應用程式)擴充套件到多個團隊(在多個應用程式上進行協作)!
- Sapper: Sapper 是一個用於構建各種規模的 Web 應用程式的框架,具有出色的開發體驗和靈活的基於檔案系統的路由。還提供 SSR 等!
- Socket.io: 一個實時通訊引擎,用於構建網路應用程式。
- Strapi: Strapi 是一個靈活的開源 Headless CMS,可使開發者可以自由選擇自己喜歡的工具和框架,同時還允許編輯人員輕鬆地管理和分發其內容。 通過使管理面板和 API 可以通過外掛系統進行擴充套件,Strapi 使全球最大的公司能夠加速內容交付,同時構建優美的數字體驗。