在Express中,可以通过app._router.stack属性来查找为特定方法和URL注册了哪些处理程序。app._router.stack是一个包含所有中间件和路由处理程序的数组。
下面是一个示例代码,展示了如何找出在Express中为方法/URL对注册了哪些处理程序:
const express = require('express');
const app = express();
// 定义路由处理程序
const handler1 = (req, res, next) => {
// 处理程序1的逻辑
next();
};
const handler2 = (req, res, next) => {
// 处理程序2的逻辑
next();
};
// 注册路由处理程序
app.get('/example', handler1, handler2);
// 查找注册的处理程序
const method = 'GET';
const url = '/example';
const matchedHandlers = app._router.stack.filter(layer => {
if (layer.route && layer.route.path === url && layer.route.methods[method.toLowerCase()]) {
return true;
}
return false;
});
// 输出匹配的处理程序
matchedHandlers.forEach(handler => {
console.log(handler.route.path);
console.log(handler.route.methods);
});
上述代码中,我们定义了两个处理程序handler1和handler2,并通过app.get()方法将它们注册到了'/example'路径上。然后,我们使用app._router.stack.filter()方法来查找注册的处理程序。我们指定了方法为GET,URL为'/example',并通过遍历app._router.stack数组来找到匹配的处理程序。最后,我们输出了匹配的处理程序的路径和方法。
请注意,使用app._router.stack属性是一种内部实现的方式,不建议在生产环境中使用。在实际开发中,可以使用官方提供的Router对象来管理路由和处理程序。
领取专属 10元无门槛券
手把手带您无忧上云