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

news2024/11/15 8:11:21

我说假如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.coloradmin.cn/o/1638386.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

水稻病害检测(YOLO数据集,多分类,稻瘟病、纹枯病、褐斑病、枯心病、霜霉病、水稻细菌性条纹斑病、稻苞虫)

是自己利用LabelImg工具进行手工标注,数据集制作不易,请尊重版权(稻瘟病、纹枯病、褐斑病、枯心病、霜霉病、水稻细菌性条纹斑病、稻苞虫) 如果需要yolv8检测模型和数据集放在一起的压缩包,可以关注:最新最…

Pandas入门篇(三)-------数据可视化篇3(seaborn篇)(pandas完结撒花!!!)

目录 概述一、语法二、常用单变量绘图1. 直方图(histplot)2. 核密度预估图(kdeplot)3. 计数柱状图(countplot) 三、常用多变量绘图1.散点图(1) scatterplot(2)regplot 散点图拟合回归线(3)jointplot 散点图…

DVWA 靶场命令注入通关解析

介绍 命令注入(Command Injection)是一种常见的安全漏洞,它允许攻击者通过在应用程序中执行恶意命令来获取系统权限或执行非授权操作。 命令注入通常发生在需要将用户输入作为命令执行的地方,例如Web应用程序的输入框、参数传递…

【C++容器map】map的相关用法

&#x1f389;博主首页&#xff1a; 有趣的中国人 &#x1f389;专栏首页&#xff1a; C进阶 &#x1f389;其它专栏&#xff1a; C初阶 | 初阶数据结构 | Linux 本篇文章主要讲解 C容器之map相关用法 的相关内容 文章目录 1. map的介绍2. map的使用<font size5 color #…

Word域代码学习(简单使用)-【SEQ】

Word域代码学习(简单使用)-【SEQ】 快捷键 序号快捷键操作1 Ctrl F9 插入域代码花括号2 F9 显示域代码结果3 Shift F9 切换为域代码4 Windows Alt F9 切换全部域代码 域代码说明 域代码不区分大小写在word中&#xff0c;依次选择插入➡文档部件➡域即可选择插入…

WordPress Automatic插件 SQL注入漏洞复现(CVE-2024-27956)

0x01 产品简介 WordPress Automatic(又称为WP Automatic)是一款流行的WordPress插件,旨在帮助网站管理员自动化内容创建和发布。该插件可以从各种来源(如RSS Feeds、社交媒体、视频网站、新闻网站等)获取内容,并将其自动发布到WordPress网站。 0x02 漏洞概述 WordPres…

Linux-进程调度器

1. 前言 在计算机中&#xff0c;进程的数量远多于cpu的数量&#xff0c;所以就存在&#xff0c;多个进程抢占一个cpu的情况&#xff0c;所以就需要一套规则&#xff0c;决定这些进程被处理的顺序&#xff0c;这就叫做进程调度。 在我的简单理解下&#xff0c;其实就是把进程放…

正点原子[第二期]Linux之ARM(MX6U)裸机篇学习笔记-6.4--汇编LED驱动程序

前言&#xff1a; 本文是根据哔哩哔哩网站上“正点原子[第二期]Linux之ARM&#xff08;MX6U&#xff09;裸机篇”视频的学习笔记&#xff0c;在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。…

网络安全之弱口令与命令爆破(中篇)(技术进阶)

目录 一&#xff0c;什么是弱口令&#xff1f; 二&#xff0c;为什么会产生弱口令呢&#xff1f; 三&#xff0c;字典的生成 四&#xff0c;使用Burpsuite工具验证码爆破 总结 笔记改错 一&#xff0c;什么是弱口令&#xff1f; 弱口令就是容易被人们所能猜到的密码呗&a…

Android数据恢复软件快速比较:Android数据恢复的7最佳工具

您在 Android 设备上保留哪些类型的数据&#xff1f;如果您和大多数人一样&#xff0c;那么您可能已经列出了文档、照片、视频和音频文件。如果您使用智能手机或平板电脑的时间足够长&#xff0c;我们愿意打赌您拥有Android数据丢失的第一手经验。 幸运的是&#xff0c;我们也…

JSON教程(非常详细)

参考文章来源&#xff1a;JSON教程&#xff08;非常详细&#xff09; 目录 JSON JSON 发展史 为什么要使用 JSON&#xff1f; JSON 的不足 存储格式 使用场景 1) 定义接口 2) 序列化 3) 生成 Token 4) 配置文件 JSON语法规则 JSON 与 JavaScript 对象的区别 JSON数…

Python | Leetcode Python题解之第62题不同路径

题目&#xff1a; 题解&#xff1a; class Solution:def uniquePaths(self, m: int, n: int) -> int:return comb(m n - 2, n - 1)

基于SSM的个人博客系统(三)

目录 第五章 系统实现 5.1 登录模块 5.1.1 博主登录 5.2 博客管理模块&#xff1a; 5.2.1 博客查询 5.2.2 博客新建 5.2.3 博客修改 5.2.4 博客删除 5.3 博客类别管理模块 前面内容请移步 基于SSM的个人博客系统&#xff08;二&#xff09; 个人博客系统的设计…

飞腾FT1500A-16 6U VPX高性能密集计算刀片

飞腾FT1500A-16 6U VPX高性能密集计算刀片 一款高性能6U VPX单板显示计算机&#xff0c;产品遵循OpenVPX Vita65规范。采用目前主流的GPGPU架构&#xff0c;其板载一颗天津飞腾公司的FT1500A-4四核处理器&#xff0c;并搭配AMD?公司的高性能嵌入式显卡Radeon? E8860 GPU。E88…

【论文阅读:Data Shapley: Equitable Valuation of Data for Machine Learning】

1.基于蒙特卡罗方法和截断的方法计算&#xff08;TMC—Shapley&#xff09; 输入 训练数据集D学习算法A表现分V 输出 各方数据的贡献 ϕ i \phi_i ϕi​ 初始化 初始化各方的贡献 ϕ i 0 \phi_i0 ϕi​0,并设置当前迭代轮次为0 过程 算法进入一个循环迭代&#xff0c;直到满足…

Vue 之 在当前页面的实现分页效果

目录 场景实现 场景 假设&#xff0c;我们现在有这么一个需求&#xff1a; 上述图片的空白内容是活动的&#xff0c;由下面的两个按钮控制上一页、下一页&#xff1b;我们应该可以怎么去实现&#xff1f; 实现 思路&#xff1a; 其实这个问题&#xff0c;我们仿照其他的UI框…

ctf web-部分

** web基础知识 ** *一.反序列化 在PHP中&#xff0c;反序列化通常是指将序列化后的字节转换回原始的PHP对象或数据结构的过程。PHP中的序列化和反序列化通过serialize()和unserialize()函数实现。 1.序列化serialize() 序列化说通俗点就是把一个对象变成可以传输的字符串…

2024年五一数学建模C题完整解题思路代码

2024年第二十一届五一数学建模竞赛题目 C题 煤矿深部开采冲击地压危险预测 煤炭是中国的主要能源和重要的工业原料。然而&#xff0c;随着开采深度的增加&#xff0c;地应力增大&#xff0c;井下煤岩动力灾害风险越来越大&#xff0c;严重影响着煤矿的安全高效开采。在各类深…

如何快速搭建nginx服务

华子目录 nginx简介概念特点nginx框架nginx关键工作机制 nginx正向代理功能nginx反向代理功能nginx反向代理的工作流程代理本质 nginx负载均衡部署nginx常用命令systemctl系列nginx自带命令 nginx配置文件主配置文件/etc/nginx/nginx.conf内容结构模块分析配置分析注意示例 ngi…

常见公式的几何解释

本文旨在深入探讨常见数学公式的几何意义&#xff0c;通过直观的图形和解释&#xff0c;帮助读者更好地理解并掌握这些公式的本质。文章首先概述了公式与几何图形之间的紧密联系&#xff0c;然后选取了几个典型的数学公式&#xff0c;进行详细解析。每个公式都将配以相应的几何…