3 中间件的应用场景
中间件在 Express 应用中有广泛的应用场景,包括日志记录、认证与授权、请求体解析、错误处理等。
3.1 日志记录
可以使用中间件记录每个请求的详细信息,以便调试和监控。
示例:
const morgan = require('morgan');
// 使用 morgan 中间件记录 HTTP 请求日志
app.use(morgan('combined'));
代码详解:
morgan('combined')
:使用morgan
记录 HTTP 请求日志。
3.2 认证与授权
可以使用中间件实现用户认证与授权,确保只有授权用户才能访问特定资源。
示例:
// 自定义认证中间件
function authenticate(req, res, next) {
const token = req.headers['authorization'];
if (token === 'valid-token') {
next(); // 用户已认证,调用下一个中间件或路由处理函数
} else {
res.status(401).send('Unauthorized'); // 用户未认证,返回 401 状态码
}
}
// 保护路由,只有已认证用户才能访问
app.get('/protected', authenticate, (req, res) => {
res.send('Protected resource');
});
代码详解:
authenticate(req, res, next)
:自定义认证中间件。res.status(401).send('Unauthorized')
:返回 401 状态码,表示用户未认证。
3.3 请求体解析
可以使用中间件解析不同格式的请求体,如 JSON、URL 编码的表单数据等。
示例:
// 解析 JSON 请求体
app.use(express.json());
// 解析 URL 编码的请求体
app.use(express.urlencoded({ extended: true }));
代码详解:
express.json()
:解析 JSON 请求体。express.urlencoded({ extended: true })
:解析 URL 编码的请求体。
3.4 错误处理
可以使用错误处理中间件捕获和处理应用中的所有错误。
示例:
// 普通中间件,模拟抛出错误
app.get('/error', (req, res, next) => {
const err = new Error('Something went wrong');
next(err); // 将错误传递给错误处理中间件
});
// 错误处理中间件
app.use((err, req, res, next) => {
console.error(err.stack);
res.status(500).send('Internal Server Error');
});
代码详解:
next(err)
:将错误传递给错误处理中间件。- 错误处理中间件:带有四个参数,用于处理所有传递过来的错误。
通过本章内容,读者应该能够理解并掌握 Express 中间件的各种用法,包括应用级中间件、路由级中间件、错误处理中间件、内置中间件、第三方中间件和自定义中间件。这些知识将帮助读者在 Express 应用中实现复杂的请求和响应处理逻辑。