中间件(middleware)是 Express.js 框架中一个非常重要的概念,提供了一种简洁而有效的方式来处理 HTTP 请求和响应,增强 Express.js 的功能特性。在本文中,我们将详细讲解如何有效使用 Express.js 中间件,以及如何为您的应用程序添加自定义中间件。本文旨在帮助您深入了解中间件的技术细节,掌握如何创造高效、可靠的 Express.js 应用程序。
中间件是什么?
在 Express.js 中,中间件是一个函数,它可以接收请求对象(request object)、响应对象(response object)以及 next 函数作为参数。中间件函数在处理请求对象时可以:
- 执行任何代码。
- 对请求对象和响应对象进行更改。
- 结束请求-响应循环。
- 调用堆栈中的下一个中间件函数。
下一个中间件函数是通过调用 next() 函数来实现的,如下所示:
function myMiddleware(req, res, next) { // 执行一些操作 next(); // 进行下一个中间件,如果没有下一个中间件会返回 404 }
中间件可以通过 app.use() 函数来使用,它是 Express.js 中最常用的函数之一。
app.use(myMiddleware);
Express.js 中内置的中间件
Express.js 框架自带了一些很有用的中间件,我们在这里简单的介绍其中三个。
bodyParser
bodyParser 中间件用于解析 HTTP 请求主体,特别是解析 POST、PUT 和 DELETE 请求。它会添加一个 body 属性到请求对象,其中包含 POST 或 PUT 请求参数的对象。
const bodyParser = require('body-parser'); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: false }));
这里我们使用了两种解析方式:json 和 urlencoded。
static
static 中间件用于提供静态文件。可以将一个或多个目录指定为包含静态资产的目录。在 Node.js 中,通常使用 JavaScript 和 CSS 文件作为静态文件。
app.use(express.static('public'))
这里我们将 public 目录指定为静态文件根目录。可以在 URL 中使用 /public/ 文件访问文件。
cookies
cookie-parser 是使用 Express.js 时最常用的 cookie 解析器。它使用 secret 来对 cookie 进行签名,确保 cookie 不被篡改。当请求进入时,中间件会使用 secret 将 cookie 转换回原始值。
const cookieParser = require('cookie-parser'); app.use(cookieParser('secret'));
在这里,我们将 secret 作为参数传递给 cookie-parser 来确保 cookie 不被篡改。使用 req.cookies 可以访问 cookie 值。
创建自定义中间件
除了 Express.js 中内置的中间件,我们还可以创建自定义中间件。中间件可以用于许多事情,比如记录请求、认证、处理文件上传等。
一个简单的日志中间件示例
app.use(function(req, res, next) { console.log('Time:', Date.now()); next(); });
这个中间件的作用是在控制台打印出请求时间。中间件函数可以执行任何操作,例如记录请求,更新数据库等。完整代码示例:
-- -------------------- ---- ------- ----- ------- - ------------------- ----- --- - ---------- --------------------- ---- ----- - -------------------- ------------ ------- --- ------------ ------------- ---- - --------------- --------- --- -----------------
当我们访问 localhost:3000时,控制台将打印出时间。可以看到中间件函数首先执行,然后执行了我们的路由处理函数。
总结
中间件是 Express.js 框架的核心特性之一,在应用程序中提供了强大而简洁的处理功能。
在本文中,我们介绍了中间件的定义,讲解了三个内置中间件以及如何创建自定义中间件。希望这些知识可以帮助您优化并增强您的应用程序。
如果您对此感兴趣,可以继续学习和尝试开发自己的中间件。Express.js 中间件的灵活性和可扩展性为您提供了更广泛的自定义和扩展功能。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/645e0896968c7c53b0070f5b