写点什么

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

作者:黎燃
  • 2022-11-27
    内蒙古
  • 本文字数:2269 字

    阅读完需:约 7 分钟

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) 返回falsedeepEqual(a, b) 返回truestrictEqual(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  }]
复制代码


发布于: 刚刚阅读数: 3
用户头像

黎燃

关注

前端工程师 2022-05-06 加入

专注学习分享前端知识。

评论

发布
暂无评论
在使用Note.js的过程中对于tty对于终端的运用、加密模块以及Assert的事件驱动程序的深入运用理解_前端_黎燃_InfoQ写作社区