Express.js 中间件完全指南:使用和创建基本教程

介绍

Express.js 是一个流行的 Node.js web 框架, 它提供了一种简单易用的方式来构建 web 应用程序。其中一个最关键的特性就是它的中间件 (middleware) 系统, 它允许开发者创建轻量可重用组件用以处理 HTTP 请求和响应,从而使应用的开发更加快捷、高效、可定制。本文将会深入讲解 Express.js 中间件系统,包括中间件基础知识、中间件使用、中间件的创建和中间件的组合方式。

中间件基础知识

中间件就是一个函数,英文叫做 middleware,它的作用是处理一个请求和响应。在 Express.js 中,请求(request)和响应(response)都是可以被修改的对象,中间件可以在这两个对象上进行操作和增强。中间件函数有三个参数,分别是 request 对象、response 对象和 next 函数,其中 next 函数的作用是将请求传递给下一个中间函数。

例如,以下代码展示了一个简单的中间件处理请求并打印请求的 URL:

----- ------- - -------------------
----- --- - ----------

------------- ---- ----- -- -
  ---------------- --- --------- --- -------------
  -------
---

如果想在中间件使用时止住请求传递给下一个中间件,可以使用 res.end() 函数,例如:

------------- ---- ----- -- -
  -- ---------------------------- -
    ------------------------------------
  - ---- -
    -------
  -
---

中间件的使用

Express.js 中间件可以在应用程序或路由级别使用,使用 app.use 或 app.METHOD 函数来将中间件应用到应用程序或路由处理程序中。

--------------------
------------ ------------

中间件的执行顺序是在路由处理之前,顺序为按顺序添加的顺序执行。因为这个原因,中间件可以用于所有路由,也可以在路由级别使用。

----- ---------- - ----- ---- ----- -- -
  ----------------------- -----------
  -------
-

--------------- ------------

--------------------- ----- ---- -- -
  ------------------ ---- --- ------------
---

---------------------- ----- ---- -- -
  ----------------- --- ----------
---

以上示例展示了将中间件应用于特定路由(/api),中间件打印出一条消息 'Middleware executed',app.get 和 app.post 处理分别是 'Users list was requested' 和 'User was created'。这个例子显示中间件可以根据需要部署到应用程序中的任意位置,以便在指定的路由上使用。

中间件的创建

在 Express.js 中,如果想使用自己的中间件,可以写一个函数,并在应用程序中使用 app.use 函数将中间件传递给代码库。自己编写的中间件时,应该确保中间件函数调用 next() 函数以使 Express.js 继续执行请求响应周期。

示例中间件 - 过滤器:

----- ------ - ----- ---- ----- -- -
  -- --------------- --- ------ -
    ------ ---------------------------------
  -
  -------
-

----------------

以上示例中,只有在查询字符串中包含 "name=Tom" 时,中间件拒绝向客户端发送请求结果。通过这种方法中间件函数可以与 Express.js 请求和响应逻辑无缝集成,从而让程序具有更高的可重用性。

中间件的组合方式

中间件可以根据需要组合在一起,以满足应用程序的特定要求。在 Express.js 中,组合中间件的方法有以下两种:

  • 基于 route 的中间件组合
  • 基于全局或局部中间件的组合

基于 route 的中间件组合

当必须在同一路由下使用多个中间件时,可以使用基于 route 的中间件组合方式。基于 route 的中间件组合使用 app.METHOD(path, [callback, ...callbacks]) 声明路由并添加单个或多个中间件函数作为参数。

------------------ ---------- ----- ---- -- -
  ------------------- --- ------------
---

以上代码使用 app.get 声明该路由,然后是两个中间件函数,一个是 authCheck,一个是请求处理程序。Express.js 会在'authCheck' 中间件返回调用 next() 函数之前阻止执行所有路由处理程序。

基于全局或局部中间件的组合

使用全局或局部中间件,可以让多个路由共享单个中间件。全局中间件被定义在 app.js 的顶部和底部。顶部的中间件在每个路由调用之前运行,而底部的中间件在每个路由调用之后运行。

-- ------ ----------

------------- ---- ----- -- -
  ------------------- -------------
  -------
---

-- ----- ----------
----- -------- - ----- ---- ----- -- -
  --------------------- -------------
  -------
--

-- ------
---------------------- --------- ----- ---- -- -
  -------------------- ---- ------
---

在以上示例中,'Global middleware' 会在每个路由调用之前运行,而 'getBooks middleware' 仅在 '/api/books' 路由调用之前运行。

局部中间件可以通过向 app.METHOD 函数添加中间件参数来添加。一旦添加,可以用于任何特定的路由,覆盖全局中间件的值。

结论

本文深入讲解了 Express.js 中间件的使用和创建,包括中间件基础知识、中间件使用、中间件的创建和中间件的组合方式。通过这篇文章的学习,希望各位读者能够更加深入地理解 Express.js 中间件的处理逻辑,运用好这个异常强大的功能,减少开发工作量,提高应用程序的可重用性。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/66f6c1c2c5c563ced58bc3a0


猜你喜欢

  • Vue.js中使用 vue-resource发送HTTP请求实例详解

    Vue.js是现在最受欢迎的JavaScript框架之一,用于构建单页Web应用程序。在Vue.js的生态系统中,有许多插件和库可用于帮助开发人员构建更好的应用程序。

    2 个月前
  • Cypress 3.0:如何解决测试中的慢速问题?

    Cypress 是一个 JavaScript 编写的前端自动化测试工具,它提供了一个快速、简单、可以实时监控和调试的测试平台。同时,作为一种新兴的测试框架,Cypress 也面临一些问题,比如测试过程...

    2 个月前
  • Socket.io 如何解决消息乱序问题

    前端开发中,Socket.io 是一个非常常用的库,它的作用是帮助开发者在浏览器和服务器之间建立实时、双向通信。但是在使用 Socket.io 过程中,我们经常会遇到消息乱序的问题,这是由于网络不稳定...

    2 个月前
  • TailwindCSS 的常用工具类介绍

    TailwindCSS 是一个流行的 CSS 框架,它在易用性和定制性之间保持了很好的平衡。TailwindCSS 包含大量的 CSS 工具类,这些工具类能够显著提高前端开发的效率。

    2 个月前
  • RESTful API 安全性保障指南

    RESTful API 是现代 Web 应用开发中常用的技术之一,它具有灵活、易扩展、高效的特点,在 Web 前端开发中越来越受到开发者的关注。然而,为了保护用户数据的安全,我们需要特别关注 REST...

    2 个月前
  • 利用 Mocha 测试框架检测 Node.js 中的内存泄漏

    在 Node.js 的应用开发中,内存泄漏是经常遇到的问题。当应用程序中存在内存泄漏时,系统内存会逐渐减少,最终导致系统崩溃。在这篇文章中,我们将介绍如何使用 Mocha 测试框架来检测 Node.j...

    2 个月前
  • Node.js 中的数据可视化技术详解

    数据可视化是一种重要的信息处理方法,而 Node.js 作为一种非常流行的前端技术平台,可以非常方便地进行数据可视化处理。本文将详细介绍 Node.js 中的数据可视化技术,包括数据可视化的原理、可视...

    2 个月前
  • Web Components 与插件的区别和相似之处

    前言 随着 Web 技术的发展,我们可以使用越来越丰富的工具和框架来优雅地构建网页。在这些工具中,大多数都依赖于 Web 组件或者插件来为网页添加功能。 然而,Web 组件和插件相似,又有所不同。

    2 个月前
  • ECMAScript 2018 async 迭代器模式简介

    ECMAScript 2018(即ES2018)引入了async迭代器模式,这是JavaScript中最新的异步编程工具。在这篇文章中,我们将深入探讨这个概念,以及它如何简化异步编程。

    2 个月前
  • 为什么在 ES11 中使用 optional chaining 和 nullish 合并可能会产生问题?

    前言 JavaScript 是一门灵活的动态语言,但也因此存在许多潜在的陷阱。在开发中我们经常会使用一些语法糖来解决实际问题,比如 optional chaining 和 nullish 合并。

    2 个月前
  • Docker 搭建私有 GitLab 服务

    前言 在团队协作中,版本控制扮演着至关重要的角色。而 GitLab 作为知名的开源代码托管平台,为团队协作提供了极大的方便。但是,将代码托管在公有云上也存在一些限制,例如审核时难以保护机密数据,如 A...

    2 个月前
  • Jest 测试时如何 mock 外部文件的导入?

    在做前端开发时,我们通常会使用 Jest 来进行测试。然而,当我们写测试用例时,我们常常需要 mock 一些外部文件的导入,以便于在测试时不依赖真实的外部文件。那么,如何使用 Jest 来 mock ...

    2 个月前
  • 无障碍设计:如何让可点击元素更易识别?

    在现代网页中,可点击元素无处不在。然而,对于一些使用屏幕阅读器等辅助技术的用户来说,这些元素并不一定易于识别和操作。因此,无障碍设计应当成为前端开发人员关注的重点。

    2 个月前
  • Vue SSR 初探,基于 PM2 的 Node.js 多进程

    Vue SSR 是指基于服务器端渲染的 Vue.js 应用程序,可以提高应用程序的性能和可维护性。在本文中,我们将探讨 Vue SSR 的基础知识和使用 PM2 来实现 Node.js 多进程的方法。

    2 个月前
  • React Native 如何实现图片放缩

    React Native 是一款使用 React 框架开发原生应用的框架,它允许开发人员使用 JavaScript 语言构建 Android 和 iOS 应用程序。

    2 个月前
  • MongoDB 与 Hadoop 的结合在大数据处理中的应用

    随着互联网和物联网技术的快速发展,数据量的急剧增加使得大数据处理成为了当今重要的研究领域之一。数据的存储和处理已经成为了数据科学的基础,因此大数据的处理对于企业的决策非常重要。

    2 个月前
  • Performance Optimization:使用 Xamarin.Forms 优化移动应用性能

    移动应用的性能优化一直是开发者们需要关注的问题之一。在众多的移动应用开发框架中,Xamarin.Forms 是一个很好的选择。它提供了跨平台的开发能力,并且使用 C# 语言进行开发,使得开发者能够更快...

    2 个月前
  • 在 TypeScript 项目中使用 Map 和 WeakMap 的实践经验

    在 TypeScript 项目中,Map 和 WeakMap 都是常用的数据结构,它们可以用于存储键值对的集合。虽然它们在 API 上有些相似,但在实际应用中,它们有着不同的用途和特性。

    2 个月前
  • Serverless 的标准与架构

    Serverless 是一种新兴的云计算模式,通过使用云计算和无服务器架构来减少了使用者对于设备和服务器的维护和管理。本文将详细介绍 Serverless 的标准和架构,并提供相应的示例代码以便读者深...

    2 个月前
  • 如何在 Express.js 中创建动态路由

    在开发 Web 应用程序时,动态路由是非常有用的。路由是指将端点 (URL) 与其相关联的处理请求的代码 (路由处理程序) 相匹配的过程。在动态路由中,URL 中的某些部分是参数,它们将根据用户提交的...

    2 个月前

相关推荐

    暂无文章