在使用Note.js的过程中对于tty对于终端的运用、加密模块以及Assert的事件驱动程序的深入运用理解

579 阅读4分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第4天,点击查看活动详情

tty对于终端的运用

tty模块提供tty ReadStream和tty WriteStream类。在大多数情况下,不需要或不可能直接使用此模块。但是,可以通过以下方式访问它:

const tty = require('tty');

在大多数情况下,应用程序几乎没有理由手动创建tty ReadStream和tty WriteStream类的实例。

process.stdout.on('resize', () => {
  console.log('screen size has changed!');
  console.log(`${process.stdout.columns}x${process.stdout.rows}`);
});

使用此选项可确定终端支持的颜色。由于终端颜色的性质,可能会出现假阳性或假阴性。这取决于过程信息和环境变量,这些变量可能与所使用的终端有关。可以传入env对象来模拟特定终端的使用。这对于检查特定环境设置的行为非常有用。 要强制实施特定的颜色支持,请使用以下环境设置之一。 据 stdout 是否支持至少 16 种颜色,返回 true 或 false。根据 stdout 是否支持至少 256 种颜色,返回 true 或 false。

process.stdout.hasColors();
process.stdout.hasColors(256);
process.stdout.hasColors({ TMUX: '1' });
process.stdout.hasColors(2 ** 24, { TMUX: '1' });
// 返回 false(环境设置假装支持 2 ** 8 种颜色)。

加密模块

加密模块要求节点运行以支持OpenSSL。此模块使用安全证书支持HTTPS安全网络和HTTP连接。该模块还为OpenSSL哈希、hmac、密码、解密、签名和验证方法(用于Node)提供了一层封装。 创建证书对象。参数详细信息是由键值对组成的字典。 Key:包含PEM编码的私钥的字符串 Cert:包含PEM编码证书的字符串 Ca:包含PEM编码的可信数字中心认证证书的字符串或字符串列表

const util = require('util');

async function fn() {
  return 'hello world';
}
const callbackFunction = util.callbackify(fn);

callbackFunction((err, ret) => {
  if (err) throw err;
  console.log(ret);
});

可以在 NODE_DEBUG 环境变量中指定多个逗号分隔的 section 名称:NODE_DEBUG=fs,net,tls。

可选的 callback 参数可用于用一个不同的函数替换日志函数,该函数没有任何初始化或不必要的封装。

const util = require('util');
let debuglog = util.debuglog('internals', (debug) => {
  debuglog = debug;
});

如果启用该部分,则替换为优化测试的日志记录函数

Assert

此模块用于编写单元测试。您可以使用require('assert')访问此模块。 明确肯定失败(实际、预期、消息、运算符) 此函数使用参数运算符测试实际值和预期值是否相等。 明确肯定ok(值,[message]) 测试参数值是否为true,此函数和断言Equal(true、value、message)是否等效。 明确肯定相等(实际值,预期值,[message]) 此函数是一个简单的测试函数。使用运算符“==”比较实际值和预期值是否相等。 明确肯定notEqual(实际值,预期值,[message]) 此函数是一个简单的测试函数,使用运算符“=”比较实际值和预期值是否相等。 明确肯定deepEqual(实际值,预期值,[message]) 执行深度比较以实现相等。注:三种比较的差异(感谢tytsim):

a = {'a':'1','b':'2'};
b = {'b':'2','a':'1'};
equal(a, b) 返回false
deepEqual(a, b) 返回true
strictEqual(a, b) 返回false

事件驱动程序

该模型非常高效且可扩展,因为web服务器总是接受请求,而无需等待任何读或写操作。(也称为非阻塞IO或事件驱动IO) 在事件驱动模型中,将生成一个主循环来监听事件。当检测到事件时,将触发回调函数。 在这里插入图片描述 创建 eventEmitter 对象

var events = require('events');
var eventEmitter = new events.EventEmitter();
eventEmitter.on('eventName', eventHandler);

实例: 引入 events 模块

var events = require('events');
// 创建 eventEmitter 对象
var eventEmitter = new events.EventEmitter();

// 创建事件处理程序
var connectHandler = function connected() {
   console.log('连接成功。');
  
   // 触发 data_received 事件 
   eventEmitter.emit('data_received');
}

// 绑定 connection 事件处理程序
eventEmitter.on('connection', connectHandler);
 
// 使用匿名函数绑定 data_received 事件
eventEmitter.on('data_received', function(){
   console.log('数据接收成功。');
});

// 触发 connection 事件 
eventEmitter.emit('connection');

console.log("程序执行完毕。");

返回有关V8堆空间的统计信息,即组成V8堆的碎片。无法保证堆空间的排序和堆空间的可用性,因为统计信息是通过V8 GetHeapSpaceStatistics函数提供的,并且可能会从一个V8版本更改到下一个版本。 返回的值是包含以下属性的对象数组

[
  {
    "space_name": "new_space",
    "space_size": 2063872,
    "space_used_size": 951112,
    "space_available_size": 80824,
    "physical_space_size": 2063872
  },
  {
    "space_name": "old_space",
    "space_size": 3090560,
    "space_used_size": 2493792,
    "space_available_size": 0,
    "physical_space_size": 3090560
  },
  {
    "space_name": "code_space",
    "space_size": 1260160,
    "space_used_size": 644256,
    "space_available_size": 960,
    "physical_space_size": 1260160
  },
  {
    "space_name": "map_space",
    "space_size": 1094160,
    "space_used_size": 201608,
    "space_available_size": 0,
    "physical_space_size": 1094160
  },
  {
    "space_name": "large_object_space",
    "space_size": 0,
    "space_used_size": 0,
    "space_available_size": 1490980608,
    "physical_space_size": 0
  }
]