溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Node.js開發(fā)的知識點有哪些

發(fā)布時間:2022-04-01 11:23:51 來源:億速云 閱讀:244 作者:iii 欄目:編程語言

這篇文章主要介紹“Node.js開發(fā)的知識點有哪些”,在日常操作中,相信很多人在Node.js開發(fā)的知識點有哪些問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Node.js開發(fā)的知識點有哪些”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

必備技能

JavaScript

對于一名前臺開發(fā)人員,在考慮掌握后臺技能時,無需花費大量的精力學習去 JavaScript。而對于完全小白,假如想要在盡可能短的時間內(nèi)掌握 Node.js,在深入前必需領會如下概念:

箭頭函數(shù)(Arrow Functions)

類型(Types)

表達式(Expressions)

函數(shù)(Functions)

語法結(jié)構(gòu)(Lexical Structures)

this

循環(huán)(Loops)和作用域(Scope)

數(shù)組對象(Arrays)

字面量模板(Template Literals)

嚴格模式(Strict Mode)

ES6/ES7

此外,Node.js 中涉及大量的異步編程解決,推薦掌握如下概念:

定時器(Timers)

Promises

閉包(Closures)

事件循環(huán)(Event Loop)

異步編程(Async programming)和回調(diào)(callbacks)

npm 軟件包管理

Node 軟件包管理(Node Package Manager,npm)提供當前規(guī)模最大的注冊軟件庫,其中提供 80 多萬種軟件包。正確使用 npm,可極大地降低軟件包管理的復雜度,非常便于處理應用開發(fā)中的依賴問題。

npm 提供三個組成模塊:

命令行接口(Command Line Interface,CLI):CLI 是大部分開發(fā)人員的首選方式,提供本機終端環(huán)境運行。

注冊軟件庫(Registry):提供大規(guī)模開放式 JavaScript 軟件和元信息數(shù)據(jù)庫。

Web 站點:可查找新的軟件包,并提供其它少量 npm 功能。

npm 還可管理各版本的代碼及依賴。假如使用 npx,無需下載軟件包就可運行軟件包。

Node.js 基礎知識

事件發(fā)射器(Event Emitter):做為 Node.js 中的對象,Event Emitter 在操作執(zhí)行完成后發(fā)送消息,觸發(fā)特定的事件。開發(fā)人員也可編寫代碼,監(jiān)聽 Event Emitter 發(fā)出的事件。例如,一旦完成特定的前臺操作,諸如鼠標點擊、按鍵和鼠標移動等交互操作,需在后臺做進一步解決。這時后臺的 Node.js 環(huán)境使用 EventEmitter 類,構(gòu)建相應的事件解決模塊,用于解決操作事件。

前臺技術的升級如此迅速,在這樣的大環(huán)境下,前臺工程師保持自學能力就顯得尤其重要了。因而,“學什么”“怎樣學”就是我們要迫切處理的問題。這是我的前臺交流學習qun:前面是六零三,中間是九八五,后面是九九三。假如需要學習資料在里面下載。我做這行十多年,有問題隨時來問我,學習方法,學習效率等等問題。

回調(diào)(Callback):回調(diào)是特定任務執(zhí)行完成后調(diào)用的函數(shù),不影響其它代碼的同時執(zhí)行,避免了異步解決產(chǎn)生阻塞。鑒于 Node.js 中需解決大量的異步任務,因而回調(diào)無處不在?;卣{(diào)是實現(xiàn)應用無縫快速執(zhí)行的關鍵,其運作機制如下圖所示:

Node.js開發(fā)的知識點有哪些

Buffer 類:設計用于解決原始二進制數(shù)據(jù)的 Node.js 類,操作 V8 引擎外分配的內(nèi)存。Buffer 類實現(xiàn)為大小不可調(diào)整的整數(shù)數(shù)組,并提供一整套二進制數(shù)據(jù)操作方法。例如,對于表示范圍在 0 到 255 之間字節(jié)值的內(nèi)存中整數(shù),使用 console.log() 輸出該 Buffer 實例,會給出一系列十六進制值。

模塊系統(tǒng)(Module System):使用 Node.js 生態(tài)系統(tǒng)提供的模塊,可實現(xiàn)少量復雜功能。模塊是可復用的 JavaScript 代碼,實現(xiàn)特定的功能。

開發(fā)技能

版本管理系統(tǒng):掌握 git、GitHub 等的使用。開發(fā)中,應盡量避免交叉修改代碼導致的更改不可逆。因而,在大型項目中需使用版本控制系統(tǒng)管理。要熟習版本控制系統(tǒng)的使用,開發(fā)人員應該具有扎實的基礎知識。

HTTP/HTTPS 協(xié)議:一位優(yōu)秀的 Node.js 開發(fā)人員,應具有傳輸協(xié)議數(shù)據(jù)傳輸?shù)幕A知識,由于每位后臺開發(fā)人員都需要深入了解 HTTP/HTTPS 的工作機制。HTTPS 使用稱為 TLS(Transport Layer Security)的加密協(xié)議加密通信。后臺環(huán)境中有大量要學習的知識點,這對于 Web 小白是頗具難度的。簡而言之,基本的 Web 通信主要包括六種請求方法:

GET: 獲取資源的表示;

POST: 創(chuàng)立新資源;

PUT: 升級資源;

PATCH: 局部修改資源;

DELETE: 刪除 URL 指定的資源

OPTIONS: 請求指定 URL/ 服務器所支持的通信。

Web 框架

注意:本文僅列出了部分推薦 Web 框架。使用 Node.js 構(gòu)建個人項目時,為降低學習難度,推薦從中選定一種框架,否則學習難度很高。

Express.js:提供構(gòu)建應用所需的最小化接口和工具,非常靈活易用,大量 npm 模塊可直接插入 Expresss 使用。

Meteor.js:一種構(gòu)建 JavaScript 應用的萬事通框架,提供內(nèi)建的 MongoDB,支持 GraphQL。運行 meteor create myapp,就可生成一個具備 MongoDB 后臺的 HTML/JavaScript 頁面。使用 Meteor.js 可有效助降低項目開發(fā)時間,并簡化項目的維護。當然假如只是構(gòu)建一個簡單的 Web 應用,還是推薦使用 Express。

Sails.js:一種支持快速構(gòu)建 REST API、單頁應用(SPA)和實時 APP 的 MVC 框架。假如開發(fā)人員考慮實操少量重要技能,例如使用 WebSockets 支持實時操作,使用按商定編程(convention over configuration)方法等,推薦學習 Sails.js。

Koa.js:假如開發(fā)人員考慮構(gòu)建一個經(jīng)得起時間考驗、易于維護的魯棒應用,Koa.js 無疑是很好的選擇。Koa 應用實現(xiàn)為包含一組中間件函數(shù)數(shù)組的對象,其中函數(shù)以堆棧方式執(zhí)行。

Nest.js:該框架繼承了 Angular 的理念,使用 TypeScript 構(gòu)建,并且在底層使用了 Express.js,因而兼容大多數(shù) Express 中間件。Nest 提供很好的模塊化結(jié)構(gòu),代碼組織在不同模塊中,進而構(gòu)建高效、良好擴展的應用。

數(shù)據(jù)庫管理

學習 Node.js 需要掌握大量的后臺技能。對于一名小白,開始可選擇 MySQL 等數(shù)據(jù)庫。只有厘清后臺系統(tǒng)設計的基礎知識,才能根據(jù)項目的需求,考慮在 MySQL 等基本 SQL 數(shù)據(jù)庫之外選取后臺。

注意:關系數(shù)據(jù)庫仍然是主流。例如,在建模產(chǎn)品、類比、標簽等時仍然主要使用關系表結(jié)構(gòu)。相似于電子表格,關系表由行和列組成。

關系數(shù)據(jù)庫管理系統(tǒng)

SQL Server:微軟的關系數(shù)據(jù)庫產(chǎn)品,支持標準 ANSI SQL,也提供產(chǎn)品獨有的 SQL 實現(xiàn)。

MySQL:一款優(yōu)秀的關系數(shù)據(jù)庫管理系統(tǒng),時由 Oracle 提供的開源后臺軟件,具有按需改進代碼的靈活性。MySQL 可很好地替代 Oracle、Microsoft SQL server 等商業(yè)數(shù)據(jù)庫產(chǎn)品。

PostgreSQL:具備大規(guī)模開發(fā)團隊支持的開源產(chǎn)品,可運行在 Linux、UNIX 和 Windows 等大多數(shù)主流操作系統(tǒng)上。PostgreSQL 支持絕大多數(shù)標準 SQL 查詢,還提供復雜 SQL 查詢、外鍵、觸發(fā)器、事務、MVCC、流復制等特性。

MariaDB:MySQL 的改進版,額外內(nèi)建了多種特性、安全和性能改進。簡而言之,MariaDB 性能優(yōu)于 MySQL,推薦在大型應用中使用 MariaDB。例如,MariaDB 的大型連接池支持超過 20 萬的并發(fā)連接,明顯優(yōu)于 MySQL。

云數(shù)據(jù)庫服務

Azure CosmosDB:一種全球分布式數(shù)據(jù)庫服務,支持遠程管理數(shù)據(jù)。對于大型應用,云數(shù)據(jù)庫在擴展型和可管理性上具備優(yōu)勢。Microsoft Azure 完全簡化了可擴展和分布能力,在同一后臺上支持多種數(shù)據(jù)模型,就可同時用于文檔、鍵值、關系和圖模型。該服務不依賴于任何模式,因而可稱為 NoSQL 數(shù)據(jù)庫,但可使用支持 ACID 交易的查詢語言。

Amazon DynamoDB:非常適用于具備 SQL 經(jīng)驗的客戶,提供全托管 NoSQL 數(shù)據(jù)庫服務,具備高性能,可預測,擴展性很好。DynamoDB 支持創(chuàng)立關系表,可存儲并檢索任何規(guī)模的數(shù)據(jù),提供任何服務等級的請求。

NoSQL 數(shù)據(jù)庫

MongoDB:面向文檔的 NoSQL 數(shù)據(jù)庫,適用于大規(guī)模數(shù)據(jù)存儲。相似于表是關系數(shù)據(jù)庫的基礎,MongoDB 使用集合(Collection)和文檔(Document)。其中,文檔包含了鍵值對,是 MongoDB 的基本數(shù)據(jù)單元。集合包含一系列文檔和函數(shù),對標關系數(shù)據(jù)庫中的表。

Redis:可用于數(shù)據(jù)庫、緩存和消息代理商(Message Broker)。Redis 使用字符串、哈希、列表、集合、位圖、hyperloglog 和時空索引等數(shù)據(jù)結(jié)構(gòu),以鍵值形式存儲數(shù)據(jù)。下面舉例說明:

假設應用必需解決受權(quán)客戶的不同操作。每次驗證客戶身份,都必需獲取應用中訪問權(quán)限控制模塊的受權(quán)。實現(xiàn)此類安全機制的方案很多。例如,標準的 JOSE(JavaScript 對象簽名和加密)框架可確保應用數(shù)據(jù)的安全性。但面對多種受權(quán)時,應用同樣很難擴展。除了發(fā)送受權(quán)列表給客戶,另一種處理方案是將客戶受權(quán)以某種形式的數(shù)據(jù)庫存儲。受權(quán)以鍵值對(也稱為令牌)形式提供,客戶必需提供鍵值進行驗證。

Apache Cassandra:Facebook 創(chuàng)立的高度可擴展、高性能的分布式數(shù)據(jù)庫,設計針對物理上分布的海量數(shù)據(jù),實現(xiàn)無單點故障的存儲。不同于其它關系數(shù)據(jù)庫系統(tǒng),Cassandra 在分布式設計上參考了 Amazon DynamoDB,數(shù)據(jù)模型使用 Google BigTable。

LiteDB:一款超輕量級、高性能的 .NET NoSQL 嵌入數(shù)據(jù)庫,實現(xiàn)無服務器的文檔存儲。LiteDB 使用于小型的桌面應用、Web 應用,可根據(jù)每個客戶的每個賬戶建立一個獨立數(shù)據(jù)庫。

搜索引擎

注意:為什么需要理解搜索引擎技術,下面舉例說明。假如使用谷歌搜索引擎,它本身就是一個完整的 Web 應用。對于 Solr 和 ElasticSearch 等后臺框架,它們會對所有類型數(shù)據(jù)集創(chuàng)立索引,進而在服務器提供搜索功能。Solr 支持百萬級客戶的搜索引擎網(wǎng)站。

ElasticSearch:一種基于 Apache Lucene 使用 Java 開發(fā)的搜索和分析引擎,實現(xiàn)海量數(shù)據(jù)的實時存儲和分析。其高性能來自于對索引而非文本的搜索,核心基于結(jié)構(gòu)化文檔,而非關系表和模式,提供豐富的 REST API 存儲和搜索數(shù)據(jù)。ElasticSearch 可認為是一臺解決 JSON 請求并返回 JSON 數(shù)據(jù)的服務器。

Solr:提供包括字段搜索、布爾查詢、短語查詢、模糊查詢、語法檢查、自動填全等高級實時搜索功能。

 緩存

注意:緩存使用內(nèi)存中存儲文件拷貝,降低網(wǎng)絡調(diào)用,提供更快的網(wǎng)絡響應。

內(nèi)存緩存

該技術大多數(shù)情況下使用服務器的內(nèi)存,因而通常稱為內(nèi)存緩存。服務器的一部分內(nèi)存用作緩存,存儲降低應用網(wǎng)絡調(diào)用所需的所有數(shù)據(jù)。Node.js 提供的節(jié)點緩存(node-cache)和內(nèi)存緩存(memory-cache)軟件庫,很好地解決了 Node 服務器上的內(nèi)存緩存。

分布式緩存

分布式緩存將多個網(wǎng)絡內(nèi)存整合為單一的內(nèi)存數(shù)據(jù)存儲,進而用于緩存最終數(shù)據(jù),提供對數(shù)據(jù)的快速訪問。該技術尤其適用于大規(guī)模數(shù)據(jù)和大量網(wǎng)絡調(diào)用的情況,通過在群集中增加更多的服務器實現(xiàn)緩存容量的增量擴展和擴容。Redis 是目前最廣為使用的 分布式內(nèi)存,推薦進一步理解 Memcached。

Node.js開發(fā)的知識點有哪些

模板引擎

模板引擎支持在應用開發(fā)中使用靜態(tài)模板文件,并在運行時替換模板文件中的變量為實際值,生成發(fā)送給用戶的 HTML 文件。下面列出了少量廣為使用的模板引擎。

Mustache.js

Handlebars

EJS

實時通信

Socket.io:對于起步接觸后臺開發(fā)的學習者,理解 Socket.io 的實時通信需要補充很多知識,主要底層邏輯在用戶端和服務器之間。Socket.io 支持用戶和服務器間的雙向數(shù)據(jù)流,可視為實現(xiàn)兩個終端間實時通信的同步數(shù)據(jù)流行為。這需要用戶在瀏覽器支持 Socket.IO,并且服務器端繼承了 Socket.IO 軟件包,進而數(shù)據(jù)才能以 JSON 請求的形式發(fā)送。

API 用戶端

REST

在 REST 提出之前,API 使用遠程過程調(diào)用(RPC)開發(fā),相似于本地執(zhí)行的代碼。期間許多技術使用了相似于 RPC 的技術棧,并未從根本上處理問題,直到 REST 提出以更好的方式構(gòu)建基于 Web 的 API。

REST 架構(gòu)使用基本 HTTP 調(diào)用進行通信,避免了使用 COBRA、COM +,RPC 等復雜方式通信。在 REST 中,調(diào)用是基于消息的,依賴 HTTP 標準形容消息。在 Node.js 生態(tài)中,推薦使用 node-rest-client 和 Axios。這兩個軟件庫為快速 Web 應用提供了很好的支持。

GraphQL

GraphQL 可很好地替代 REST。它使用 API 優(yōu)先為用戶精確提供所請求的數(shù)據(jù),是一種靈活并且對開發(fā)人員友好的替代方案,可使用 GraphiQL IDE 部署。GraphQL 具備多項優(yōu)點,包括在不影響現(xiàn)有查詢情況下增加和禁用數(shù)據(jù)域,以及支持多種方式構(gòu)建 API。

    測試    

單元測試框架

單元測試實現(xiàn)各單元和組件的隔離測試。其中,單元可以是應用中的最小可測試代碼部分。下面列出 Node.js 的最好的單元測試框架:

Jest:一款由 Facebook 提供的測試框架,因其簡潔性而廣為使用。Jest 相比其它所有測試框架而言具備最好的文檔,支持并行測試,這意味可使用單獨進程獨立運行各個測試,實現(xiàn)性能最大化。

Mocha:為 Node 應用提供原始標準的單元測試框架,支持回調(diào)等異步操作,支持使用高度可擴展和自己設置斷言的 Promise。

Chai:支持與 Mocha 一同使用,可做為 Node.js 的 TDD/BDD 斷言庫,可匹配任何基于 JavaScript 的測試框架。

模擬測試(Mocking)

單元測試的規(guī)模越小越好,并盡可能輕量級執(zhí)行。但在少量情況下,測試對象存在對其余對象的依賴。

例如,對于需要與域服務器或者 Web Service 通信的對象,無法執(zhí)行快速、輕量級的測試,這時就需要 Mocking 測試。運行 Mocking 測試不需要任何實際數(shù)據(jù)庫,或者是任何類型的連接,只返回給出預期結(jié)果的對象。Mocking 測試只使用少量基本對象,模擬給出實際測試結(jié)果,因而可擺脫所有局限更快地運行測試。

到此,關于“Node.js開發(fā)的知識點有哪些”的學習就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關知識,請繼續(xù)關注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI