Node.js學習筆記

Node.js簡介

• Node.js是一個能夠在服務器端運行JavaScript的開放源代碼、 跨平臺JavaScript運行環境。

• Node採用Google開發的V8引擎運行js代碼,使用事件驅動、 非阻塞和異步I/O模型等技術來提高性能,可優化應用程序的傳輸量和規模。

• Node大部分基本模塊都用JavaScript編寫。在Node出現之前, JS通常作爲客戶端程序設計語言使用,以JS寫出的程序常在用戶的瀏覽器上運行。

• Node主要用於編寫像Web服務器一樣的網絡應用,這和PHP 和Python是類似的。

• 但是Node與其他語言最大的不同之處在於,PHP等語言是阻 塞的而Node是非阻塞的。

• Node是事件驅動的。開發者可以在不使用線程的情況下開發 出一個能夠承載高併發的服務器。其他服務器端語言難以開發 高併發應用,而且即使開發出來,性能也不盡人意。

• Node正是在這個前提下被創造出來。

• Node把JS的易學易用和Unix網絡編程的強大結合到了一起。

• Node.js允許通過JS和一系列模塊來編寫服務器端應用和網絡 相關的應用。

• 核心模塊包括文件系統I/O、網絡(HTTP、TCP、UDP、DNS、 TLS/SSL等)、二進制數據流、加密算法、數據流等等。Node 模塊的API形式簡單,降低了編程的複雜度。

• 使用框架可以加速開發。常用的框架有Express.js、Socket.IO 和Connect等。Node.js的程序可以在Microsoft Windows、 Linux、Unix、Mac OS X等服務器上運行。

• Node.js也可以使用CoffeeScript、TypeScript、Dart語言,以 及其他能夠編譯成JavaScript的語言編程。

模塊引用

• 在規範中,定義了require()方法,這個方 法接手模塊標識,以此將一個模塊引入到 當前運行環境中。

• 模塊引用的示例代碼: – var math = require('math');

模塊定義

• 在運行環境中,提供了exports對象用於導 出當前模塊的方法或者變量,並且它是唯 一的導出的出口。

• 在模塊中還存在一個module對象,它代表 模塊自身,而exports是module的屬性。

• 在Node中一個文件就是一個模塊。

exports.xxx = function() {};
module.exports = {};

模塊標識

• 模塊標識其實就是模塊的名字,也就是傳 遞給require()方法的參數,它必須是符合 駝峯命名法的字符串,或者是以.、..開頭的 相對路徑、或者絕對路徑。

• 模塊的定義十分簡單,接口也十分簡潔。 每個模塊具有獨立的空間,它們互不干擾, 在引用時也顯得乾淨利落。

 

Node的模塊實現

• Node中雖然使用的是CommonJS規範,但是 其自身也對規範做了一些取捨。

• 在Node中引入模塊,需要經歷如下3個步驟: – 路徑分析 – 文件定位 – 編譯執行

• 在Node中,模塊分爲三類:一類是底層由 C++編寫的內建模塊,一類是Node提供的核 心模塊;還有一類是用戶編寫的模塊,稱爲文 件模塊。

包 package

• CommonJS的包規範允許我們將一組相關 的模塊組合到一起,形成一組完整的工具。

• CommonJS的包規範由包結構和包描述文 件兩個部分組成。

• 包結構 – 用於組織包中的各種文件

• 包描述文件 – 描述包的相關信息,以供外部讀取分析

包結構

• 包實際上就是一個壓縮文件,解壓以後還 原爲目錄。符合規範的目錄,應該包含如 下文件:

– package.json 描述文件

– bin 可執行二進制文件

– lib js代碼

– doc 文檔

– test 單元測試

包描述文件

• 包描述文件用於表達非代碼相關的信息, 它是一個JSON格式的文件 – package.json, 位於包的根目錄下,是包的重要組成部分。

• package.json中的字段

– name、description、version、keywords、 maintainers、contributors、bugs、 licenses、repositories、dependencies、 homepage、os、cpu、engine、builtin、 directories、implements、scripts、author、 bin、main、devDependencies。

NPM(Node Package Manager)

• CommonJS包規範是理論,NPM是其中一 種實踐。

• 對於Node而言,NPM幫助其完成了第三 方模塊的發佈、安裝和依賴等。藉助NPM, Node與第三方模塊之間形成了很好的一個 生態系統。

NPM命令

• npm –v

– 查看版本

• npm

– 幫助說明

• npm search 包名

– 搜索模塊包

• npm install 包名

– 在當前目錄安裝包

• npm install 包名 –g

– 全局模式安裝包

• npm remove 包名

– 刪除一個模塊

• npm install 文件路徑

– 從本地安裝

• npm install 包名 –registry=地址

– 從鏡像源安裝

• npm config set registry 地址

– 設置鏡像源

 

Buffer(緩衝區)

• 從結構上看Buffer非常像一個數組,它的元 素爲16進制的兩位數。

• 實際上一個元素就表示內存中的一個字節。

• 實際上Buffer中的內存不是通過JavaScript 分配的,而是在底層通過C++申請的。

• 也就是我們可以直接通過Buffer來創建內存中的空間。

Buffer的操作

• 使用Buffer保存字符串

let str = "你好 nodejs"; 

let buf = Buffer.from(str , "utf-8"); 

• 創建指定大小的Buffer對象

let buf3 = Buffer.alloc(1024*8)

Buffer的轉換

• Buffer與字符串間的轉換

– 支持的編碼:

• ASCII、UTF-8、UTF-16LE/UCS-2、Base64、 Binary、Hex

– 字符串轉Buffer

• Buffer.from(str , [encoding]);

– Buffer轉字符串

• buf.toString([encoding] , [start] , [end]);

 

寫入操作

• 向緩衝區中寫入字符串

– buf.write(string[, offset[, length]][, encoding])

• 替換指定索引位置的數據

– buf[index]

• 將指定值填入到緩衝區的指定位置

– buf.fill(value[, offset[, end]][, encoding])

讀取操作

• 將緩衝區中的內容,轉換爲一個字符串返回

– buf.toString([encoding[, start[, end]]])

• 讀取緩衝區指定索引的內容

– buf[index]

其他操作

• 複製緩衝區

– buf.copy(target[, targetStart[, sourceStart[, sourceEnd]]])

• 對緩衝區切片

– buf.slice([start[, end]])

• 拼接緩衝區

– Buffer.concat(list[, totalLength])

 

fs(文件系統)

• 在Node中,與文件系統的交互是非常重要 的,服務器的本質就將本地的文件發送給 遠程的客戶端

• Node通過fs模塊來和文件系統進行交互

• 該模塊提供了一些標準文件訪問API來打開、 讀取、寫入文件,以及與其交互。

• 要使用fs模塊,首先需要對其進行加載 – const fs = require("fs");

同步和異步調用

• fs模塊中所有的操作都有兩種形式可供選擇 同步和異步。

• 同步文件系統會阻塞程序的執行,也就是 除非操作完畢,否則不會向下執行代碼。

• 異步文件系統不會阻塞程序的執行,而是 在操作完成時,通過回調函數將結果返回。

發佈了32 篇原創文章 · 獲贊 9 · 訪問量 7931
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章