node.js知识系列(4)-每天了解一点

目录

    • 11. 异步文件操作
      • 文件读取
      • 文件写入
    • 12. 包管理器(npm)
    • 13. 子进程
    • 14. 事件发射器(EventEmitter)
    • 15. 异步编程和回调
    • 16. Node.js 集成测试工具和框架
    • 17. Express.js 中间件的 HTTP 请求流程
    • 18. 文件上传和验证
    • 19. Express.js 中的 WebSocket 支持
    • 20. 身份验证和授权中间件


👍 点赞,你的认可是我创作的动力!

⭐️ 收藏,你的青睐是我努力的方向!

✏️ 评论,你的意见是我进步的财富!


11. 异步文件操作

Node.js 提供了异步文件操作的 API,用于读取和写入文件。通常,您可以使用 fs 模块来执行这些操作。以下是一些基本的文件读取和写入示例:

文件读取

const fs = require('fs');fs.readFile('file.txt', 'utf8', (err, data) => {if (err) {console.error(err);return;}console.log(data); // 读取文件内容
});

文件写入

const fs = require('fs');const content = 'Hello, Node.js!';
fs.writeFile('file.txt', content, (err) => {if (err) {console.error(err);return;}console.log('文件已写入');
});

在上述示例中,文件读取和写入操作是异步执行的,当操作完成或出现错误时,回调函数会被调用。

12. 包管理器(npm)

Node.js 的包管理器(npm)是用于管理 JavaScript 包和依赖项的工具。它的主要功能和用途包括:

  • 包安装和管理:npm 允许您轻松安装、更新和卸载 JavaScript 包。通过运行 npm install package-name,您可以安装特定的包。
  • 项目依赖管理:npm 允许您在项目中定义依赖项,将依赖信息记录在 package.json 文件中。这使得共享项目和管理依赖变得更加简单。
  • 脚本执行:您可以在 package.json 文件中定义自定义脚本,以简化项目中的常见任务,如构建、测试和部署。
  • 包发布:如果您编写了一个 JavaScript 包,npm 允许您将其发布到 npm 包仓库,以供其他开发者使用。
  • 版本控制:npm 使用语义化版本控制,使得可以指定依赖项的版本范围,以确保项目的稳定性和兼容性。

13. 子进程

Node.js 的子进程是一个独立的进程,可以在您的应用程序中创建和管理它们。子进程通常用于执行外部命令、脚本或其他程序。

Node.js 提供了 child_process 模块,用于创建和与子进程进行通信。以下是创建子进程的基本示例:

const { spawn } = require('child_process');const child = spawn('ls', ['-l']); // 创建子进程运行 'ls -l' 命令child.stdout.on('data', (data) => {console.log(`子进程输出:${data}`);
});child.on('close', (code) => {console.log(`子进程退出,退出码 ${code}`);
});

在上述示例中,我们使用 spawn 方法创建了一个子进程来运行 ls -l 命令。子进程的输出和关闭事件都被监听,以便处理子进程的输出和退出。

14. 事件发射器(EventEmitter)

事件发射器是 Node.js 核心模块之一,用于实现事件驱动编程。它允许对象可以绑定自定义事件和触发这些事件。事件发射器在应用程序中的使用案例包括:

  • 自定义事件:您可以创建自己的事件,以便在应用程序中响应特定的行为或状态变化。
  • 回调函数注册:事件发射器允许将回调函数注册到事件上,并在事件触发时执行这些回调。
  • 异步通信:它允许模块之间进行异步通信,使代码更加模块化和可维护。

以下是一个简单的事件发射器示例:

const EventEmitter = require('events');class MyEmitter extends EventEmitter {}const myEmitter = new MyEmitter();myEmitter.on('event', () => {console.log('事件已触发');
});myEmitter.emit('event'); // 触发事件

在上述示例中,我们创建了一个自定义事件发射器 MyEmitter,并定义了一个事件处理函数。然后,我们绑定事件处理函数到事件上,并使用 emit 方法触发事件。

15. 异步编程和回调

在 Node.js 中,异步编程是一种重要的编程模式,用于处理非阻塞操作,以提高应用程序的性能和响应速度。异步编程主要通过回调函数实现,回调函数将在操作完成后执行。

以下是一个简单的异步回调示例:

const fs = require('fs');fs.readFile('file.txt', 'utf8', (err, data) => {if (err) {console.error(err);return;}console.log(data); // 读取文件内容
});

在上述示例中,fs.readFile 是一个异步操作,当文件读取完成后,回调函数将被执行。这样可以避免阻塞应用程序,允许其他操作继续执行。

Node.js 还提供了其他异步编程模式,如 Promise 和 async/await,以更容易地处理异步操作和回调。

16. Node.js 集成测试工具和框架

在 Node.js 中进行集成测试时,有几个常见的工具和框架可供选择,以确保应用程序的各个部分协同工作并具备预期的功能。一些常见的工具和最佳实践包括:

  • Mocha:Mocha 是一个流行的测试框架,它提供了强大的测试运行器和丰富的断言库。它支持异步测试和各种报告器。
  • Chai:Chai 是一个断言库,与 Mocha 配合使用,使您可以编写可读性强的测试用例。
  • Supertest:Supertest 是一个用于测试 HTTP 接口的库,可以轻松模拟 HTTP 请求并断言响应。
  • Jest:Jest 是一个全功能的 JavaScript 测试框架,可用于编写单元测试和集成测试。它具有内置的断言库,支持异步测试和模拟功能。
  • Cypress:Cypress 是一个端到端的测试框架,用于编写自动化的用户界面测试。它提供了一个实时预览功能,使测试编写和运行变得更加直观。

最佳实践包括编写独立的测试用例、模拟依赖项、在测试之前和之后执行清理操作,并定期运行测试套件以确保应用程序的稳定性。

17. Express.js 中间件的 HTTP 请求流程

Express.js 中的中间件处理 HTTP 请求流程遵循以下原则:

  1. 请求阶段:在请求进入 Express.js 应用程序时,会按照定义的顺序执行各个中间件。这些中间件可以执行请求预处理、身份验证、日志记录等操作。
  2. 路由匹配:当请求进入中间件链时,Express.js 会匹配请求的 URL 路径和 HTTP 方法与已定义的路由。匹配的路由处理函数将被执行。
  3. 路由处理:路由处理函数执行后,如果没有调用 next(),请求处理流程将在此结束。如果调用了 next(),控制将传递给下一个中间件或路由处理函数。
  4. 错误处理:如果在路由处理或中间件中发生错误(通过 next(err) 抛出),错误处理中间件将捕获错误并执行相应的错误处理逻辑。
  5. 响应阶段:最终,响应被发送到客户端,可能经过多个中间件来进行最后的修改,例如设置响应头、发送数据等。

中间件的执行顺序取决于它们在应用程序中的定义顺序。通常,中间件链按照定义的顺序依次执行。但如果某个中间件未调用 next(),则不会执行链中的后续中间件。

18. 文件上传和验证

在 Express.js 中处理文件上传并验证文件类型和大小通常需要使用第三方中间件,如 multer。以下是一个简单的示例,演示如何处理文件上传并验证文件类型和大小:

const express = require('express');
const multer = require('multer');
const app = express();// 配置文件上传
const storage = multer.diskStorage({destination: (req, file, cb) => {cb(null, 'uploads/');},filename: (req, file, cb) => {cb(null, file.originalname);},
});const fileFilter = (req, file, cb) => {if (file.mimetype === 'image/jpeg' || file.mimetype === 'image/png') {cb(null, true); // 允许上传} else {cb(new Error('只允许上传 JPEG 和 PNG 格式的图片'), false); // 拒绝上传}
};const upload = multer({storage,fileFilter,limits: {fileSize: 1024 * 1024, // 限制文件大小为 1MB},
});// 处理文件上传
app.post('/upload', upload.single('file'), (req, res) => {res.send('文件上传成功');
});app.listen(3000, () => {console.log('服务器正在监听端口 3000');
});

上述示例中,使用 multer 中间件配置了文件上传,并添加了文件类型验证、文件大小限制等功能。上传的文件将被保存到指定的目录。

19. Express.js 中的 WebSocket 支持

Express.js 本身不提供原生的 WebSocket 支持,但可以集成 WebSocket 库,例如 socket.io,以实现 WebSocket 功能。

以下是一个简单的 Express.js 与 socket.io 集成的 WebSocket 示例:

const express = require('express');
const http = require('http');
const socketIo = require('socket.io');const app = express();
const server = http.createServer(app);
const io = socketIo(server);io.on('connection', (socket) => {console.log('用户已连接');socket.on('chat message', (msg) => {io.emit('chat message', msg); // 广播消息给所有客户端});socket.on('disconnect', () => {console.log('用户已断开连接');});
});app.get('/', (req, res) => {res.sendFile(__dirname + '/index.html');
});server.listen(3000, () => {console.log('服务器正在监听端口 3000');
});

在上述示例中,使用 Express.js 创建 HTTP 服务器,并集成 socket.io 来处理 WebSocket 连接。客户端可以通过 WebSocket 发送和接收消息。

20. 身份验证和授权中间件

Express.js 中有许多身份验证和授权中间件可供选择。其中一些常见的包括 Passport.js、jsonwebtoken、和 express-jwt。

  • Passport.js:是一个灵活且广泛使用的身份验证中间件,支持

多种身份验证策略(例如本地策略、OAuth、OpenID 等)。

  • jsonwebtoken:是一个用于生成和验证 JSON Web Tokens(JWT)的库,可用于实现基于令牌的身份验证和授权。
  • express-jwt:是一个 Express.js 中间件,用于验证 JWT 令牌。它可以轻松集成到 Express.js 应用程序中,以保护特定的路由或资源。

身份验证中间件通常用于验证用户的身份,而授权中间件用于控制用户对资源的访问权限。这些中间件可以根据需求进行配置,以满足应用程序的安全性需求。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/101512.shtml

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

相关文章

SpringBoot和Hibernate——如何提高数据库性能

摘要:本文由葡萄城技术团队发布。转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。 前言 在软件开发领域,性能是重中之重。无论您是构建小型 Web 应用程序还是大型企业系统…

单目标应用:遗传算法(Genetic Algorithm,GA)求解微电网优化MATLAB

一、微网系统运行优化模型 微电网优化模型介绍: 微电网多目标优化调度模型简介_IT猿手的博客-CSDN博客 二、遗传算法GA 遗传算法(Genetic Algorithm,GA)起源于对生物系统所进行的计算机模拟研究,是一种随机全局搜索…

【Java 进阶篇】JavaScript 数据类型详解

JavaScript是一种弱类型脚本语言,具有动态类型。这意味着JavaScript中的变量可以容纳不同类型的数据,并且它们的类型可以在运行时更改。在本文中,我们将深入探讨JavaScript中的数据类型,包括原始数据类型和引用数据类型&#xff0…

安科瑞ARB5系列弧光保护装置,智能电弧光保护,保障用电安全

安科瑞虞佳豪壹捌柒陆壹伍玖玖零玖叁 什么是弧光 电弧是放电过程中发生的一种现象,当两点之间的电压超过其工频绝缘强度极限时就会发生。当适当的条件出现时,一个携带着电流的等离子产生,直到电源侧的保护设备断开才会消失。空气在通常条件…

【ARM CoreLink 系列 6 -- DMC-400控制器简介】

文章目录 1.1 DMC-400 简介1.1.1 DFI(DDR PHY Interface)1.1.2 DFI 接口组1.1.3 DMC-400 兼容协议1.1.4 DMC-400 特性1.1.5 DMC-400 Interface 1.1 DMC-400 简介 DMC-400是一个由ARM开发、测试和授权的动态内存控制器,同时 DMC-400也是一个符…

git 回滚到指定版本

第一步:找到指定的需要回滚的版本的版本号 项目终端输入命令git log --oneline 第二步:使用git命令回滚到指定的版本 git reset --hard 版本号 第三步:此时再推到远程仓库用git push 会报错,需要用git push -f强推上去才可以哦

Swagger-go学习笔记

目录 Swagger的作用背景Swagger介绍 Swagger的基本使用1. 使用步骤2. 添加注释3. 生成接口文档数据4. 引入gin-swagger5. 测试结果6. 使用Token Swagger-go的中文文档通用API信息API操作MIME类型参数类型数据类型 Swagger的作用 背景 在传统的前后端分离的项目中,…

vue3组件的通信方式

一、vue3组件通信方式 通信仓库地址:vue3_communication: 当前仓库为贾成豪老师使用组件通信案例 不管是vue2还是vue3,组件通信方式很重要,不管是项目还是面试都是经常用到的知识点。 比如:vue2组件通信方式 props:可以实现父子组件、子父组件、甚至兄弟组件通信 自定义事件:可…

C语言自定义类型_枚举联合(3)

目录 枚举 什么是枚举类型? 枚举的声明 枚举的定义 枚举的优点 枚举的使用 联合(共用体) 什么是联合呢? 联合类型的定义 联合的特点 联合使用 联合大小的计算 联合的应用 今天接着我们来结束自定义类型。&#x1f19…

Flink之Watermark源码解析

1. WaterMark源码分析 在Flink官网中介绍watermark和数据是异步处理的,通过分析源码得知这个说法不够准确或者说不够详细,这个异步处理要分为两种情况: watermark源头watermark下游 这两种情况的处理方式并不相同,在watermark的源头确实是异步处理的,但是在下游只是做的判断,这…

TensorFlow学习:在web前端如何使用Keras 模型

前言 在上篇文章 TensorFlow学习:使用官方模型进行图像分类、使用自己的数据对模型进行微调中我们学习了如何使用官方模型,以及使用自己的数据微调模型。 但是吧,代码一直是跑在Python里,而我本身是做前端开发的。我是很想让它在…

es elasticsearch 基础

es https://www.elastic.co/guide/en/elasticsearch/reference/6.8/getting-started.html 倒排索引: 正排–>从目录到文章内容 倒排–>内容到目录文章标题 if we dont need full text search ,we dont need to create 倒排 using text type 分词&#xff1a…

C语言-贪吃蛇 1.输入控制ncurse

一、为什么要用nurse C语言中的gets()、scanf()、getchar()等函数是在用户输入后需要按下Enter键才能执行代码,而贪吃蛇要求按下按键后立即对蛇的方向进行操作,所以根据贪吃蛇功能的需求引入ncurse,让用户输入后就能让蛇进行对应的行动。 二、…

10.本项目的简单介绍及所用工具

本项目的简单介绍及所用工具 本项目的层次架构适合初学者或者有一些基础的同学,项目整体简单明了,有着非常严谨的逻辑思维,并且在前面文章中也讲了一些项目中所需要的软件安装配置以及一些前置的在本项目中所需要的java基础知识。 项目名称 …

服务器与网站部署知识体系目录

1.网站部署必备知识与实践操作 服务器全套基础知识:包含基本概念,作用,服务器选择,服务器管理等域名相关基础知识普及域名备案流程(个人备案,腾讯云 / 阿里云)将网站域名访问从http升级到https…

8路高速光栅尺磁栅尺编码器4倍频计数转Modbus TCP网络模块 YL99-RJ45

特点: ● 光栅尺磁栅尺解码转换成标准Modbus TCP协议 ● 高速光栅尺磁栅尺4倍频计数,频率可达5MHz ● 模块可以输出5V的电源给光栅尺或传感器供电 ● 支持8个光栅尺同时计数,可识别正反转 ● 可以设置作为16路独立DI高速计数器 ● 可网…

小程序js(正则表达式):文本框对手机号进行标准化规范

一、使用 <input> 组件的 type 属性设置为 "number"&#xff0c;并结合正则表达式进行校验。 <input type"number" bindinput"checkPhoneNumber" /> Page({checkPhoneNumber: function (e) {const phoneNumber e.detail.value;//…

智慧办公数据可视化大屏设计(数据可视化)、大数据、数据大屏、办公数据大屏、办公数据

本次分享的作品是用软件Axure8.0&#xff08;兼容9和10&#xff09;制作的智慧办公数据进行的可视化大屏设计&#xff0c;主要是针对办公的综合数据、工位数据、会议室数据、访客数据、能耗数据以及设备智控数据进行可视化数据分析。 1、综合分析:对办公室的整体数据、空气质量…

JVM第一讲:JVM相关知识体系详解+面试(P6熟练 P7精通)

JVM相关知识体系详解面试(P6熟练 P7精通) 面试时常常被面试官问到JVM相关的问题。本系列将给大家构建JVM核心知识点全局知识体系&#xff0c;本文是JVM第一讲&#xff0c;JVM相关知识体系详解和相关面试题梳理。 文章目录 JVM相关知识体系详解面试(P6熟练 P7精通)1、JVM学习建议…

设计模式 - 行为型考点模式:责任链模式(概述 | 案例实现 | 优缺点 | 使用场景)

目录 一、行为型模式 1.1、责任链模式 1.1.1、概述 1.1.2、案例实现 1.1.3、优缺点 1.1.4、使用场景 一、行为型模式 1.1、责任链模式 1.1.1、概述 为了避免请求发送者和多个请求处理者耦合在一起&#xff0c;就将所有请求处理者通过前一个对象记住下一个对象的引用的方…