express(编写中间件)

本文介绍如何为Express应用程序编写中间件,包括中间件的功能、如何通过它们执行代码、修改请求和响应对象以及调用next()来传递控制权到下一个中间件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

编写中间件以用于Express应用程序

概述

中间件函数能够访问请求对象(req)、响应对象(res)以及应用程序的请求/响应循环中的下一个中间件函数。下一个中间件函数通常由名为next的变量来表示。

中间件函数可以执行以下任务:

  • 执行任何代码。
  • 对请求和响应对象进行更改。
  • 结束请求/响应循环
  • 调用堆栈中的下一个中间件

如果当前中间件函数没有结束请求/响应循环,那么它必须调用next().以将控制权传递给下一个中间件函数。否则,请求将保持挂起状态。

以下是“Hello World”Express 应用程序的简单示例,将为其定义两个中间件函数:

var express = require('express');
var app = express();

app.get('/', function (req, res) {
  res.send('Hello World!');
});

app.listen(3000);
 请注意以上对next()的调用。调用此函数时,将调用应用程序中的下一个中间件函数。next() 函数不是 Node.js 或 Express API 的一部分,而是传递给中间件函数的第三自变量。next() 函数可以命名为任何名称,但是按约定,始终命名为“next”。为了避免混淆,请始终使用此约定。

### Express.js 中间件使用教程 #### 定义与作用 中间件是在应用程序中处理请求和响应周期的一部分函数。这些函数可以访问请求对象 (`req`)、响应对象 (`res`) 及应用的下一个中间件函数 `next`。通过这种方式,可以在实际业务逻辑之前或之后执行特定的操作,比如日志记录、身份验证等[^2]。 #### 创建自定义中间件 当发现多个路由处理器中有重复代码时,创建自定义中间件是一个很好的解决方案。例如,如果希望为每一个进入系统的HTTP请求打印路径,则可以通过编写如下所示的一个简单的中间件来完成此操作: ```javascript const loggerMiddleware = (req, res, next) => { console.log(`${new Date().toISOString()} - ${req.method} request for '${req.url}'`); next(); // 调用以传递控制给下一个中间件/路由处理程序 }; app.use(loggerMiddleware); ``` 这段代码会拦截所有的 HTTP 请求并输出一条消息到服务器的日志文件里[^1]。 #### 静态资源托管 对于提供静态内容的应用来说,Express 提供了一个叫做 `express.static()` 的内置中间件用来轻松地服务像HTML页面、图像以及 CSS 文件这样的静态资产。只需要指定要共享目录的位置即可: ```javascript // 假设项目结构如下: // /project-root // ├── public/ // │ └── images/ // │ └── logo.png // ... app.use(express.static('public')); ``` 现在任何位于 `/public/images/logo.png` 下面的内容都可以被外部访问者获取到了[^3]。 #### 错误处理中间件 除了常规的功能型中间件外,还有专门用于捕捉错误情况下的异常信息并向客户端返回适当状态码及提示语句的一种特殊形式——即所谓的“错误处理中间件”。它接收四个参数而不是三个,并且通常放在所有其他路由和中间件后面注册: ```javascript app.use((err, req, res, next) => { console.error(err.stack); res.status(500).send('Something broke!'); }); ``` 以上就是关于如何利用 Express.js 构建高效可靠的Web应用程序的一些基本指导原则;当然这还只是冰山一角,在实践中还有很多技巧等待探索!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值