node.js的常用内置库(1)共128节

server/2024/10/18 14:15:08/

我说假如node.js 一路杀出,成为一种后端主要选型的时候,你再次去了解晚么,不晚,但给你的时间肯定不多~😄 跟着我一起开始认识node吧,今日份不多3个API ,加油

1.assert

 在 Node.js 环境中开发时,质量不容忽视。为提高代码的健壮,我们经常需要断言工具来进行代码校验。Node.js 内建的断言库,即 assert 模块,充当了自动化测试和异常检测中的关键角色。断言是指一种预期表达式应始终为真的测试方法。如果遇到断言为假的情况,就会引发错误,这有助于开发者迅速识别问题所在。

引入:

const assert = require('assert');

断言函数:

  1. assert.ok(value, [message]): 要求 value 为真。如果为假,将抛出一个附有 message 的错误。
  2. assert.strictEqual(actual, expected, [message]): 验证 actual 和 expected 的值是否严格相等,不进行类型转换。
  3. assert.deepEqual(actual, expected, [message]): 验证 actual 和 expected 是否在值上相等,即使它们是不同类型的数据,也会尝试类型转换。
  4. assert.throws(block, [error], [message]): 验证 block 函数是否会引发错误,并可以指定期待错误类型的 error 。
  5. assert.doesNotThrow(block, [error], [message]): 验证 block 函数是否不会引发错误。

使用方法:

 

const assert = require('assert');
const express = require('express');const app = express();app.get('/', (req, res) => {res.send('Hello, I am learning Node.js assert!');
});const server = app.listen(3000, () => {console.log('Server is running on port 3000');
});// 测试的用例
assert.ok(server !== undefined, 'Server is error');
assert.strictEqual(1 + 1, 2, '1 + 1 should be equal to 2');console.log('All tests passed');

2.async_hooks

 async_hooks 模块是在 v8.0.0 版本正式加入 Node.js 的实验性 API。什么是 async_hooks 呢?async_hooks 提供了追踪异步资源的 API,这种异步资源是具有关联回调的对象。简而言之,async_hooks 模块可以用来追踪异步回调。

node 基于事件循环的异步非阻塞 I/O 模型,发起一次异步调用,回调在之后的循环中才被调用,此时已经无法追踪到是谁发起了这个异步调用,无法从日志中确认调用链。

用法:

// 监听 fs.readFile 异步回调const fs = require('fs')
const async_hooks = require('async_hooks');
const { fd } = process.stdout;let indent = 0;
async_hooks.createHook({init(asyncId, type, triggerAsyncId) {const eid = async_hooks.executionAsyncId();const indentStr = ' '.repeat(indent);fs.writeSync(fd,`${indentStr}${type}(${asyncId}):` +` trigger: ${triggerAsyncId} execution: ${eid} \n`);},before(asyncId) {const indentStr = ' '.repeat(indent);fs.writeSync(fd, `${indentStr}before:  ${asyncId}\n`);indent += 2;},after(asyncId) {indent -= 2;const indentStr = ' '.repeat(indent);fs.writeSync(fd, `${indentStr}after:  ${asyncId}\n`);},destroy(asyncId) {const indentStr = ' '.repeat(indent);fs.writeSync(fd, `${indentStr}destroy:  ${asyncId}\n`);},
}).enable();function callback(err, data) {console.log('callback', data)
}fs.readFile("a.txt", callback)
console.log('after a')
fs.readFile("b.txt", callback)
console.log('after b')

3.Buffer

对于JavaScript 语言,其自身只有字符串数据类型,没有二进制数据类型。但在处理像TCP流或文件流时,依赖二进制数据。因而 Node.js中,定义了一个 Buffer 类,该类用来创建一个专门存放二进制数据的缓存区。

Node.js中的Buffer是一个全局对象,属于固有(built-in)类型的全局变量,不需要使用require函数导入。它允许直接操作原始内存,主要用于处理二进制数据流。Buffer实例对象的结构和整数数组很像,但Buffer的大小是固定的且在V8堆外分配物理内存。

每个Buffer实例对应底层的固定长度的内存分配,大小在被创建时确定,且无法改变,但实例对象的内容可以像操作数组一样修改。此外,Buffer实例的元素为16进制的两位数,即0~255的数值(16的二次方),可以像数组一样操作Buffer实例。

Buffer将性能相关的部分使用C++实现,非性能相关的部分使用JavaScript实现。使用Buffer的主要原因是基于性能方面的考虑,特别是在进行I/O操作和网络数据传输时,预先把静态内容(字符串、图片等)转换为Buffer对象,可以减少CPU的重复使用、节省服务器资源并大幅提升性能。

使用:

const buf = Buffer.from('Hello, world!', 'utf8');
console.log(buf.toString('base64'));

需要注意的是,由于Buffer实例是在V8堆外分配内存,因此在使用完Buffer实例后应该手动将其释放,避免内存泄漏。可以通过调用Buffer.alloc()Buffer.from()方法来创建一个新的Buffer实例来释放内存。

释放内存:

let buffer = Buffer.alloc(10); // 创建一个大小为10的buffer对象
// 使用buffer对象进行数据处理
buffer = null; // 释放内存

好了,今天到这里,大数据推给你自会有它的道理,希望你能懂,带着信念走下去!🤔 


http://www.ppmy.cn/server/28058.html

相关文章

Oracle集群ORA-03113:end-of-file on communication channel

一、问题场景描述 今天Oracle集群要更新各数据库的数据,折腾的启动不了了: --》数据量比较大,数据泵方式导出的dmp文件 准备导入集群 --》由于之前的生产数据库数据比较少,需要增大表空间。 --》于是在sqlplus命令窗口&#xff0c…

2024五一杯数学建模C题思路分享 - 煤矿深部开采冲击地压危险预测

文章目录 1 赛题选题分析 2 解题思路2.1 问题重述2.2 第一问完整思路2.2 二、三问思路更新 3 最新思路更新 1 赛题 C题 煤矿深部开采冲击地压危险预测 煤炭是中国的主要能源和重要的工业原料。然而,随着开采深度的增加,地应力增大,井下煤岩动…

k8s解析数据 -o=jsonpath=‘{}‘ 的使用

kubectl -ojsonpath 是 Kubernetes 命令行工具 kubectl 中的一个输出选项,用于以 JSONPath 格式提取并展示 API 对象的部分内容。JSONPath 是一种查询语言,它允许用户在 JSON 结构中导航和提取数据。这对于自动化脚本和快速查询 Kubernetes 资源的特定部…

STM32 工程移植 LVGL:一步一步完成

STM32 工程移植 LVGL:一步一步完成 LVGL,作为一款强大且灵活的开源图形库,专为嵌入式系统GUI设计而生,极大地简化了开发者在创建美观用户界面时的工作。作为一名初学者,小编正逐步深入探索LVGL的奥秘,并决…

在CSDN创作了6个月,我收获了什么?文末送书~

作者主页:阿玥的小东东主页! 正在学习:python和C/C 期待大家的关注哦 目录 一次很好的机会,让我开始了CSDN之旅 首先来看看我的几位领路人 创作动力 1W粉丝 在CSDN我收获了什么? 很高的展现量 认证创作者身份 社…

OpenFeign修改HttpClient为Apache HttpClient 5

OpenFeign中http client 如果不做特殊配置,OpenFeign默认使用JDK自带的HttpURLConnection发送HTTP请求, 由于默认HttpURLConnection没有连接池、性能和效率比较低。所以修改为Apache HttpClient 5。 总结为两步: 加依赖改yml 具体操作请往…

代谢组数据分析五:溯源分析

MetOrigin Analysis {#MetOriginAnalysis} 微生物群及其代谢产物与人类健康和疾病密切相关。然而,理解微生物组和代谢物之间复杂的相互作用是具有挑战性的。 在研究肠道代谢物时,代谢物的来源是一个无法避免的问题即代谢物到底是来自肠道微生物的代谢还是宿主本身代谢产生的…

【深耕 Python】Data Science with Python 数据科学(17)Scikit-learn机器学习(二)

写在前面 关于数据科学环境的建立,可以参考我的博客: 【深耕 Python】Data Science with Python 数据科学(1)环境搭建 往期数据科学博文一览: 【深耕 Python】Data Science with Python 数据科学(2&…