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具备如下属性:

相关文章
相关标签/搜索