Express.js 是 Node.js 平台上广受欢迎的 Web 应用程序框架。作为一款高度灵活的框架,Express.js 提供了许多可扩展的功能,其中中间件是其中最重要的功能之一。本文将为您介绍 Express.js 中间件的原理和实践,并提供一些示例代码来帮助您更好地理解。
什么是中间件
在 Express.js 中,中间件是一种函数,它可以访问请求对象 (req)、响应对象 (res) 和应用程序的请求-响应循环中的下一个中间件函数。中间件函数通常用于执行某些操作,例如记录请求、验证请求、处理错误等。中间件函数可以使用以下方法来结束请求-响应循环:
- 调用
next()
函数来将控制权传递给下一个中间件函数。 - 调用
res.end()
函数来结束请求-响应循环。 - 调用
res.send()
函数来将响应发送到客户端并结束请求-响应循环。
中间件的执行顺序
在 Express.js 中,中间件的执行顺序非常重要。中间件函数按照它们在代码中出现的顺序执行,因此您需要非常小心地安排它们的顺序。例如,如果您在处理静态文件的中间件函数之前放置了某个验证请求的中间件函数,那么该验证请求的中间件函数将在处理静态文件之前执行,这可能会导致一些问题。
编写中间件函数
下面是一个简单的中间件函数示例,它将记录每个请求的时间和 URL:
function logger(req, res, next) { console.log(new Date(), req.method, req.url); next(); }
在这个示例中,我们使用 console.log()
函数来记录请求的时间、方法和 URL。然后,我们调用 next()
函数来将控制权传递给下一个中间件函数。如果您不调用 next()
函数,请求将被挂起并且客户端将无法收到响应。
使用中间件函数
要使用中间件函数,您需要将它们添加到 Express.js 应用程序中。您可以使用 app.use()
函数将中间件函数添加到应用程序中。例如,以下代码将添加我们之前定义的 logger
中间件函数:
const express = require('express'); const app = express(); app.use(logger);
在这个示例中,我们使用 app.use()
函数将 logger
中间件函数添加到应用程序中。现在,每当应用程序接收到请求时,它都会执行 logger
中间件函数,并记录请求的时间、方法和 URL。
中间件的链式调用
在 Express.js 中,您可以将多个中间件函数链接到一起,以便它们按照指定的顺序执行。例如,以下代码将链接三个中间件函数:
app.use(logger).use(authentication).use(staticFiles);
在这个示例中,我们使用 .use()
函数将 logger
、authentication
和 staticFiles
中间件函数链接在一起。现在,每当应用程序接收到请求时,它会按照以下顺序执行这些中间件函数:
logger
authentication
staticFiles
示例代码
以下是一个完整的 Express.js 应用程序示例,其中包含三个中间件函数:
-- -------------------- ---- ------- ----- ------- - ------------------- ----- --- - ---------- -------- ----------- ---- ----- - --------------- ------- ----------- --------- ------- - -------- ------------------- ---- ----- - -- -------------------------- --- --------- - ------- - ---- - ------------------------------------- - - -------- ---------------- ---- ----- - -- -------------------------------- - ------------------------ - --------------- ---- ------ - ---- - ------- - - ----------------------------------------------------- ------------ ----- ---- -- - --------------- --------- --- ---------------- -- -- - ---------------------- -- ---- ------- ---
在这个示例中,我们定义了三个中间件函数:logger
、authentication
和 staticFiles
。然后,我们使用 .use()
函数将这些中间件函数链接在一起,并将它们添加到应用程序中。最后,我们定义了一个路由处理程序(app.get()
函数),它将处理根路径的请求。当应用程序接收到请求时,它会按照以下顺序执行这些中间件函数:
logger
authentication
staticFiles
- 路由处理程序
结论
在本文中,我们介绍了 Express.js 中间件的原理和实践,并提供了一些示例代码来帮助您更好地理解。中间件是 Express.js 框架中非常重要的功能之一,它可以用于执行各种操作,例如记录请求、验证请求、处理错误等。了解中间件的工作原理和使用方法对于开发高质量的 Express.js 应用程序非常重要。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6727ac6a2e7021665e1de2ce