30天精通Nodejs--第十八天:express-中间件

2024-01-14 04:44

本文主要是介绍30天精通Nodejs--第十八天:express-中间件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

  • 引言
  • 什么是Express中间件?
  • 中间件的执行流程
  • 中间件的分类
  • 常用中间件
  • 结语

引言

Express中间件作为其核心特性之一,为请求处理流程提供了极大的灵活性和可扩展性。本文将详细解读Express中间件的工作原理、使用方式以及实际应用中的高级技巧。

什么是Express中间件?

Express中间件本质上是JavaScript函数,它们位于客户端发起的HTTP请求与服务器生成响应之间,形成一个有序的执行链。
每个中间件都有机会对请求进行预处理、修改或终结请求-响应周期。

function middleware(req, res, next) {// 对req(请求对象)、res(响应对象)进行操作// 调用next()以传递控制权给下一个中间件
}// 绑定到Express应用
app.use(middleware);

其中req代表HTTP请求,包含了所有与请求相关的属性;res则用于构建HTTP响应;而next是一个回调函数,调用它会将控制权转移给后续的中间件。

中间件的执行流程

当一个请求到达Express服务器时,它会按照绑定顺序依次通过各个中间件。如果中间件执行了res.send()、res.json()、res.end()等方法结束响应,则该请求生命周期终止,不再继续传递到后面的中间件。若没有结束响应,则必须调用next()方法,否则请求会被挂起。
例如,下面是一组按序执行的中间件:

app.use((req, res, next) => {console.log('Middleware 1');next();
});app.use((req, res, next) => {console.log('Middleware 2');res.send('Hello from Middleware 2'); // 这里会结束响应
});app.use((req, res, next) => {console.log('Middleware 3'); // 如果请求未在Middleware 2中结束,这句会执行
});

中间件的分类

  1. 应用程序级中间件:直接绑定到app实例上的中间件,对所有路由都生效。
app.use(middlewareFunction);
  1. 路由级中间件:绑定到特定路由路径的中间件,只针对匹配该路径的请求生效。
app.get('/users', middlewareFunction, (req, res) => {
});
  1. 错误处理中间件:具有四个参数(err, req, res, next),专门用来捕获并处理在整个请求-响应生命周期中产生的错误。
app.use((err, req, res, next) => {console.error(err.stack);res.status(500).send('服务器异常!');
});

常用中间件

  1. 处理请求的body数据
    会把请求的body转换为json对象
app.use(express.json())
  1. 异常处理
    上面已经提到了,当服务器发生异常时会用到
app.use((err, req, res, next) => {console.error(err.stack);res.status(500).send('服务器异常!');
});
  1. 子路由中间件
    上篇文章中用到的子路由中间件
app.use('/api', router)

结语

Express中间件机制是其强大功能的核心所在,它允许开发者采用洋葱模型处理HTTP请求,使得业务逻辑能够解耦和复用,大大提高了开发效率和应用维护性。理解和掌握中间件的使用,对于构建高质量且易于扩展的Node.js Web服务至关重要。

Express 模块的更多用法可以查阅官方文档。

切记:多写代码。
在接下来的文章中,我们将继续深入探讨Node.js的各个方面。
大家有任何问题都可以在评论区留言交流,相互学习!

这篇关于30天精通Nodejs--第十八天:express-中间件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/603984

相关文章

idea npm install很慢问题及解决(nodejs)

《ideanpminstall很慢问题及解决(nodejs)》npm安装速度慢可通过配置国内镜像源(如淘宝)、清理缓存及切换工具解决,建议设置全局镜像(npmconfigsetregistryht... 目录idea npm install很慢(nodejs)配置国内镜像源清理缓存总结idea npm in

nodejs打包作为公共包使用的完整流程

《nodejs打包作为公共包使用的完整流程》在Node.js项目中,打包和部署是发布应用的关键步骤,:本文主要介绍nodejs打包作为公共包使用的相关资料,文中通过代码介绍的非常详细,需要的朋友可... 目录前言一、前置准备二、创建与编码三、一键构建四、本地“白嫖”测试(可选)五、发布公共包六、常见踩坑提醒

从入门到精通详解Python虚拟环境完全指南

《从入门到精通详解Python虚拟环境完全指南》Python虚拟环境是一个独立的Python运行环境,它允许你为不同的项目创建隔离的Python环境,下面小编就来和大家详细介绍一下吧... 目录什么是python虚拟环境一、使用venv创建和管理虚拟环境1.1 创建虚拟环境1.2 激活虚拟环境1.3 验证虚

Java List 使用举例(从入门到精通)

《JavaList使用举例(从入门到精通)》本文系统讲解JavaList,涵盖基础概念、核心特性、常用实现(如ArrayList、LinkedList)及性能对比,介绍创建、操作、遍历方法,结合实... 目录一、List 基础概念1.1 什么是 List?1.2 List 的核心特性1.3 List 家族成

史上最全MybatisPlus从入门到精通

《史上最全MybatisPlus从入门到精通》MyBatis-Plus是MyBatis增强工具,简化开发并提升效率,支持自动映射表名/字段与实体类,提供条件构造器、多种查询方式(等值/范围/模糊/分页... 目录1.简介2.基础篇2.1.通用mapper接口操作2.2.通用service接口操作3.进阶篇3

全面解析Golang 中的 Gorilla CORS 中间件正确用法

《全面解析Golang中的GorillaCORS中间件正确用法》Golang中使用gorilla/mux路由器配合rs/cors中间件库可以优雅地解决这个问题,然而,很多人刚开始使用时会遇到配... 目录如何让 golang 中的 Gorilla CORS 中间件正确工作一、基础依赖二、错误用法(很多人一开

Spring WebClient从入门到精通

《SpringWebClient从入门到精通》本文详解SpringWebClient非阻塞响应式特性及优势,涵盖核心API、实战应用与性能优化,对比RestTemplate,为微服务通信提供高效解决... 目录一、WebClient 概述1.1 为什么选择 WebClient?1.2 WebClient 与

从入门到精通详解LangChain加载HTML内容的全攻略

《从入门到精通详解LangChain加载HTML内容的全攻略》这篇文章主要为大家详细介绍了如何用LangChain优雅地处理HTML内容,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录引言:当大语言模型遇见html一、HTML加载器为什么需要专门的HTML加载器核心加载器对比表二

从入门到精通MySQL联合查询

《从入门到精通MySQL联合查询》:本文主要介绍从入门到精通MySQL联合查询,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下... 目录摘要1. 多表联合查询时mysql内部原理2. 内连接3. 外连接4. 自连接5. 子查询6. 合并查询7. 插入查询结果摘要前面我们学习了数据库设计时要满

从入门到精通C++11 <chrono> 库特性

《从入门到精通C++11<chrono>库特性》chrono库是C++11中一个非常强大和实用的库,它为时间处理提供了丰富的功能和类型安全的接口,通过本文的介绍,我们了解了chrono库的基本概念... 目录一、引言1.1 为什么需要<chrono>库1.2<chrono>库的基本概念二、时间段(Durat