Express.js 是 Node.js 中最受欢迎的 Web 框架,它提供了一个简单易用的接口来构建 Web 应用。中间件是 Express.js 中一个非常重要的概念,本文将深入探讨中间件的概念以及如何使用它们来构建更好的 Web 应用。
什么是中间件?
中间件是一个函数,它可以访问请求对象(request object)(req)、响应对象(response object)(res)和 web 应用中处理请求-响应循环流程中的下一个中间件函数的变量(通常缩写为 next)。中间件函数可以执行以下任务:
- 执行任何代码。
- 更改请求和响应对象。
- 终止请求-响应循环。
- 调用堆栈中的下一个中间件。
如果当前中间件没有终止请求-响应循环,那么它必须调用 next() 方法将控制权传递给下一个中间件函数。否则,请求将被挂起。
编写中间件
可以使用 use() 方法将中间件函数添加到 Express.js 应用程序中。以下是一个简单的 Express.js 应用程序:
// www.javascriptcn.com code example
const express = require('express')
const app = express()
app.use((req, res, next) => {
console.log('Hello from middleware!')
next()
})
app.get('/', (req, res) => {
res.send('Hello World!')
})
app.listen(3000, () => {
console.log('Server started on port 3000')
})在上面的应用程序中,我们定义了一个中间件函数,它将在每个请求上打印 "Hello from middleware!"。然后,我们将中间件函数添加到应用程序中,使用 use() 方法。最后,我们定义了一个路由处理程序,使应用程序能够响应 / 路径的 GET 请求。
路由级别中间件
路由级别中间件与应用程序级别中间件的工作方式相同。唯一的区别在于,路由级别中间件仅适用于与其关联的路由。以下是一个示例:
// www.javascriptcn.com code example
const express = require('express')
const app = express()
const router = express.Router()
router.use((req, res, next) => {
console.log('Hello from router middleware!')
next()
})
router.get('/', (req, res) => {
res.send('Hello World from router!')
})
app.use('/router', router)
app.listen(3000, () => {
console.log('Server started on port 3000')
})在上面的应用程序中,我们定义了一个名为 router 的子应用程序,并将路由级别中间件添加到路由中。我们还定义了一个处理程序,用于响应 /router 路径的 GET 请求。最后,我们使用 use() 方法将 router 子应用程序添加到主 Express.js 应用程序中,并将其映射到 /router 路径。
错误处理中间件
错误处理中间件是一个中间件,它接受四个参数。这些参数按照顺序分别是:错误对象(err)、请求对象(req)、响应对象(res)以及 next 方法。错误处理中间件可用于处理应用程序中的任何错误。以下是一个示例:
// www.javascriptcn.com code example
const express = require('express')
const app = express()
app.use((req, res, next) => {
const err = new Error('Not found')
err.status = 404
next(err)
})
app.use((err, req, res, next) => {
res.status(err.status || 500)
res.send(err.message)
})
app.listen(3000, () => {
console.log('Server started on port 3000')
})在上面的应用程序中,我们定义了一个中间件函数来处理所有未知的路由请求。我们创建了一个错误对象,并将其传递给 next() 方法。错误处理中间件将处理该错误,并将其转换为 HTTP 响应。如果错误对象有状态属性,则使用该状态代码。否则,将默认使用 500 代码。
结束语
在本文中,我们深入讲解了中间件的概念以及如何使用它们来构建更好的 Express.js 应用程序。我们讨论了中间件的类型,包括应用程序级别、路由级别和错误处理中间件,并提供了对每个中间件类型的示例。
对于那些刚开始使用 Express.js 的开发人员来说,中间件是一个非常重要的概念。通过了解中间件的工作方式,开发人员可以更好地理解如何使用它们来构建更好的 Web 应用程序。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67d7b5efa941bf7134dd1547