📅  最后修改于: 2023-12-03 15:09:16.459000             🧑  作者: Mango
在开发 web 应用程序时,Express.js 通常被用作 web 服务器框架。中间件是一种功能强大而又灵活的机制。它是处理 HTTP 请求的软件组件,它们以特定的方式处理请求,并将处理结果传递给下一个中间件或处理程序。但有时候我们需要在跳过一个或多个中间件时以不同的方式处理请求。在本文中,我们将讨论如何在 Express.js 中跳过中间件。
next('route')
Express.js 中的路由器可由多个路由和中间件组成。当请求到达路由器时,它会按照这些路由和中间件的顺序依次处理它们。我们可以通过调用 next('route')
跳过当前路由的所有中间件,并转到下一个路由的处理函数。
假设我们有以下路由:
app.get('/users', validateUser, getUser);
如果我们需要跳过 validateUser
中间件并直接访问 getUser
处理函数,可以像这样使用 next('route')
:
function validateUser(req, res, next) {
if (req.query.username === 'admin') {
next();
} else {
res.send('Unauthorized');
}
}
function getUser(req, res, next) {
res.send('Hello, world!');
}
app.get('/users', validateUser, getUser);
// 使用 next('route') 跳过 validateUser 中间件
app.get('/users', function (req, res, next) {
if (req.query.username === 'admin') {
next('route');
} else {
next();
}
}, getUser);
Express.js 路由实例中有一个中间件栈。我们可以使用 router.stack
属性访问该栈,从而删除特定的中间件。
假设我们有以下路由:
app.get('/users', validateUser, getUser);
如果我们需要跳过 validateUser
中间件并直接访问 getUser
处理函数,可以这样删除它:
app.get('/users', validateUser, getUser);
// 从路由的中间件栈中删除 validateUser
app._router.stack.forEach(function (middleware, index, arr) {
if (middleware.handle === validateUser) {
arr.splice(index, 1);
}
});
app.get('/users', getUser);
注意,这种方法可能会对路由器的其他部分产生意外的影响。为了避免这种情况,最好使用方法一。
以上就是跳过 Express.js 中的中间件的方法。通过这些方法,我们可以轻松地从路由中跳过一个或多个中间件,进而更好地管理请求和响应的流程。