📅  最后修改于: 2023-12-03 14:41:05.148000             🧑  作者: Mango
在 Express.js 中,中间件是一个函数,它可以访问请求对象(request object - req),响应对象(response object - res),和 next 函数的三个参数。中间件函数可以执行任何操作,可以修改请求和响应对象,可以结束请求-响应循环,也可以调用 next 函数将控制传递给下一个中间件函数。一个 Express.js 应用程序可以由多个中间件函数组成,每个中间件函数都有自己的任务,可以是路由处理程序、错误处理程序等。
编写 Express.js 中间件函数需要遵循一些规则:
下面是一个简单的中间件函数的示例:
// middleware function
const myMiddleware = (req, res, next) => {
console.log('This is my middleware.');
next();
};
// use middleware
app.use(myMiddleware);
此中间件函数仅向控制台输出一条消息,然后使用 next 函数将控制权传递给下一个中间件函数。
在 Express.js 中,使用 app.use() 函数将中间件函数添加到 Express.js 应用程序中。可以将中间件函数添加到整个应用程序(全局中间件),也可以将其添加到特定的路由上(路由中间件)。下面是一个添加全局中间件的示例:
// middleware function
const logger = (req, res, next) => {
console.log(`${new Date().toISOString()} - ${req.method} ${req.url}`);
next();
};
// use middleware
app.use(logger);
此中间件函数将每个请求的时间戳、请求方法和请求 URL 输出到控制台。
除了全局中间件外,还可以将中间件函数添加到特定的路由上。当请求的 URL 路径与路由的路径匹配时,路由中间件将被调用。下面是如何在路由上添加中间件的示例:
// middleware function
const auth = (req, res, next) => {
if (req.headers.authorization === 'secret') {
next();
} else {
res.sendStatus(401);
}
};
// route with middleware
app.get('/protected', auth, (req, res) => {
res.send('You are authorized.');
});
此中间件函数将检查请求头中的 authorization 字段是否为 'secret',如果是,则将控制传递给下一个中间件,否则将发送一个状态为 401 的 HTTP 响应。
错误处理中间件函数与常规中间件函数类似,其不同之处在于其应对程序运行中可能发生的错误:在请求处理期间抛出的任何错误都会由错误处理中间件捕获。错误处理中间件必须使用四个参数:错误对象、请求对象、响应对象和 next 函数。下面是错误处理中间件函数的示例:
// error handling middleware
const errorHandler = (err, req, res, next) => {
console.error(err.stack);
res.status(500).send('Something went wrong!');
};
// use error handling middleware
app.use(errorHandler);
此中间件函数被添加到应用程序中,并用于处理程序中发生的任何错误。当错误发生时,它将控制传递给错误处理中间件,该中间件将错误堆栈输出到控制台,并发送一个 HTTP 状态为 500 的响应。
Express.js 中的中间件是一种函数,它可以访问请求和响应对象并控制流程。中间件可以用于处理请求、验证和授权等操作。它们可以添加到整个应用程序或特定的路由上,并且可以按特定顺序进行排序。对于新手程序员来说,编写有效的中间件函数是创建可维护和可扩展 Express.js 应用程序的关键。