Node.js API參考文檔(目錄)

Node.js v11.5.0 API參考文檔

Node.js®是基於Chrome的V8 JavaScript引擎構建的JavaScript運行時。node

斷言測試

穩定性:2 - 穩定

assert模塊提供了一組簡單的斷言測試,可用於測試不變量。git

存在strictlegacy模式,但建議僅使用strict模式。github

有關使用的相等比較的更多信息,請參閱MDN關於相等比較和相同性的指南segmentfault

  • assert.AssertionError類
  • strict模式
  • legacy模式
  • assert(value[, message])
  • assert.deepEqual(actual, expected[, message])
  • assert.deepStrictEqual(actual, expected[, message])
  • assert.doesNotReject(asyncFn, error)
  • assert.doesNotThrow(fn, error)
  • assert.equal(actual, expected[, message])
  • assert.fail([message])
  • assert.fail(actual, expected[, message[, operator[, stackStartFn]]]) 棄用
  • assert.ifError(value)
  • assert.notDeepEqual(actual, expected[, message])
  • assert.notDeepStrictEqual(actual, expected[, message])
  • assert.notEqual(actual, expected[, message])
  • assert.notStrictEqual(actual, expected[, message])
  • assert.ok(value[, message])
  • assert.rejects(asyncFn, error)
  • assert.strictEqual(actual, expected[, message])
  • assert.throws(fn, error)

異步鉤子

穩定性:1 - 實驗

async_hooks模塊提供了一個API來註冊回調,跟蹤Node.js應用程序內部建立的異步資源的生命週期,它能夠使用如下方式訪問:數組

const async_hooks = require('async_hooks');

異步資源表示具備關聯回調的對象,能夠屢次調用此回調,例如,net.createServer()中的'connection'事件,或者只是fs.open()中的一次。在調用回調以前,也能夠關閉資源,AsyncHook沒有明確區分這些不一樣的狀況,但會將它們表示爲資源的抽象概念。異步

若是使用Worker,則每一個線程都有一個獨立的async_hooks接口,每一個線程將使用一組新的異步ID。socket

  • Public API
  • Promise執行跟蹤
  • JavaScript Embedder API

Buffer

穩定性:2 - 穩定

在引入TypedArray以前,JavaScript語言沒有用於讀取或操做二進制數據流的機制,Buffer類是做爲Node.js API的一部分引入的,用於在TCP流、文件系統操做和其餘上下文中與八位字節流進行交互。async

Buffer類的實例相似於整數數組,但對應於V8堆外部的固定大小的原始內存分配,Buffer的大小在建立時創建,沒法更改。ide

Buffer類在全局做用域內,所以不太可能須要使用require('buffer').Buffer函數

// Creates a zero-filled Buffer of length 10.
const buf1 = Buffer.alloc(10);

// Creates a Buffer of length 10, filled with 0x1.
const buf2 = Buffer.alloc(10, 1);

// Creates an uninitialized buffer of length 10.
// This is faster than calling Buffer.alloc() but the returned
// Buffer instance might contain old data that needs to be
// overwritten using either fill() or write().
const buf3 = Buffer.allocUnsafe(10);

// Creates a Buffer containing [0x1, 0x2, 0x3].
const buf4 = Buffer.from([1, 2, 3]);

// Creates a Buffer containing UTF-8 bytes [0x74, 0xc3, 0xa9, 0x73, 0x74].
const buf5 = Buffer.from('tést');

// Creates a Buffer containing Latin-1 bytes [0x74, 0xe9, 0x73, 0x74].
const buf6 = Buffer.from('tést', 'latin1');
  • Buffer.from(),Buffer.alloc()和Buffer.allocUnsafe()
  • 緩衝區和字符編碼
  • 緩衝區和TypedArray
  • 緩衝區和迭代
  • Buffer類
  • buffer.INSPECT_MAX_BYTES
  • buffer.kMaxLength
  • buffer.transcode(source, fromEnc, toEnc)
  • SlowBuffer類 棄用
  • Buffer常量

C++擴展庫

Node.js擴展庫是動態連接的共享對象,用C++ 編寫,能夠使用require()函數加載到Node.js中,就像它們是普通的Node.js模塊同樣使用,它們主要用於提供Node.js中運行的JavaScript與C/C++庫之間的接口。

目前,實現擴展庫的方法至關複雜,涉及多個組件和API的知識:

  • V8:Node.js目前用來提供JavaScript實現的C++庫,V8提供了建立對象、調用函數等的機制,V8的API大多記錄在v8.h頭文件(Node.js源代碼樹中的deps/v8/include/v8.h)中,該文件也可在線獲取。
  • libuv:實現Node.js事件循環的C庫,它工做線程和平臺的全部異步行爲,它還能夠做爲跨平臺的抽象庫,爲全部主要操做系統提供簡單的相似POSIX訪問,以及許多常見的系統任務,例如與文件系統、sockets、定時器和系統事件的交互。libuv還提供相似並行線程的線程抽象,可用於驅動須要超越標準事件循環的更復雜的異步擴展庫。鼓勵擴展庫做者考慮如何經過libuv將工做卸載到非阻塞系統操做,工做線程或libuv線程的自定義使用來避免使用I/O或其餘時間密集型任務阻止事件循環。
  • 內部Node.js庫,Node.js自己導出了擴展庫能夠使用的許多C++ API - 其中最重要的是node::ObjectWrap類。
  • Node.js包括許多其餘靜態連接庫,包括OpenSSL,這些其餘庫位於Node.js源代碼樹的deps/目錄中,Node.js只故意從新導出libuv、OpenSSL、V8和zlib symbols,而且能夠經過擴展庫在不一樣的範圍內使用,有關其餘信息,請參閱連接到Node.js本身的依賴項。

如下全部示例都可供下載,可用做擴展庫的起點。

  • Hello world
  • Node.js原生抽象
  • N-API
  • 擴展庫示例

C/C++插件 - N-API

穩定性:2 - 穩定

N-API(在字母中發音爲N,後跟API)是用於構建原生擴展庫的API,它獨立於底層JavaScript運行時(前V8),並做爲Node.js自己的一部分進行維護,此API將是跨Node.js版本的應用程序二進制接口(ABI)穩定版,它旨在將擴展庫與底層JavaScript引擎中的更改隔離開來,並容許爲一個主要版本編譯的模塊在Node.js的後續主要版本上運行而無需從新編譯,ABI穩定性指南提供了更深刻的解釋。

使用與C++擴展庫一節中概述的相同方法/工具構建/打包擴展庫,惟一的區別是原生代碼使用的API集,不使用V8或Node.js原生抽象API,而是使用N-API中可用的功能。

N-API公開的API一般用於建立和操做JavaScript值,概念和操做一般映射到ECMA262語言規範中指定的想法,API具備如下屬性:

相關文章
相關標籤/搜索