推荐答案
什么是 Express 中间件?
Express 中间件是在请求和响应之间执行的函数。它可以访问请求对象 (req)、响应对象 (res) 以及应用程序的请求-响应周期中的下一个中间件函数 (next)。中间件可以执行以下任务:
- 执行任何代码。
- 修改请求和响应对象。
- 结束请求-响应周期。
- 调用堆栈中的下一个中间件。
如何创建和使用中间件?
创建中间件: 中间件是一个函数,通常接受三个参数:
req、res和next。例如:const myMiddleware = (req, res, next) => { console.log('This is a middleware'); next(); // 调用下一个中间件 };使用中间件: 中间件可以通过
app.use()或app.METHOD()方法添加到 Express 应用中。例如:// www.javascriptcn.com code example const express = require('express'); const app = express(); app.use(myMiddleware); // 全局使用中间件 app.get('/', (req, res) => { res.send('Hello World'); }); app.listen(3000, () => { console.log('Server is running on port 3000'); });路由级中间件: 中间件也可以应用于特定的路由。例如:
app.get('/special', myMiddleware, (req, res) => { res.send('This is a special route'); });错误处理中间件: 错误处理中间件有四个参数:
err、req、res和next。例如:app.use((err, req, res, next) => { console.error(err.stack); res.status(500).send('Something broke!'); });
本题详细解读
中间件的执行顺序
中间件的执行顺序非常重要。Express 会按照中间件添加的顺序依次执行它们。如果某个中间件没有调用 next(),请求-响应周期将在此终止,后续的中间件将不会被执行。
中间件的类型
应用级中间件: 通过
app.use()或app.METHOD()绑定到应用实例上的中间件。路由级中间件: 通过
router.use()或router.METHOD()绑定到路由实例上的中间件。错误处理中间件: 专门用于处理错误的中间件,通常放在所有其他中间件之后。
内置中间件: Express 提供的内置中间件,如
express.static用于提供静态文件。第三方中间件: 通过 npm 安装的第三方中间件,如
body-parser用于解析请求体。
中间件的常见用途
- 日志记录:记录每个请求的详细信息。
- 身份验证:验证用户身份。
- 请求体解析:解析请求体中的数据。
- 错误处理:捕获和处理错误。
示例代码
// www.javascriptcn.com code example
const express = require('express');
const app = express();
// 应用级中间件
app.use((req, res, next) => {
console.log('Request URL:', req.originalUrl);
next();
});
// 路由级中间件
app.get('/user', (req, res, next) => {
console.log('User route');
next();
}, (req, res) => {
res.send('User Info');
});
// 错误处理中间件
app.use((err, req, res, next) => {
console.error(err.stack);
res.status(500).send('Something broke!');
});
app.listen(3000, () => {
console.log('Server is running on port 3000');
});