给出Express JS应用或路由器的实例,是否可以将请求与应用配置的路由进行匹配,并接收描述该应用注册的路由的对象?
例如,如果应用程序要处理对/users/1
的请求,则app
/ router
实例可以以编程方式检查应用程序是否具有路由在使用URI和HTTP方法的情况下可以满足此请求?
理想的sudo(ish)代码:
const app = express();
app.use((req, res, next) => {
const handler = app.match(req);
// {
// 'method': 'GET',
// 'path': '/user/:id', <--- mainly looking for this
// 'handler': <function reference>
// }
next();
});
app.get('/user/:id', (req, res, next) => {
// fetch the user and do something with it
});
...
答案 0 :(得分:1)
AFAIK没有公开记录的Express路由器终结点,可以根据其4.x
Documentation提供您描述的行为。
但是,您可以自己创建一个自定义的正则表达式验证器,以检查req.path
字符串是否与任何定义的路径匹配,从而自己实现。不利的一面是,您必须将该列表与注册到Express的列表分开维护,这可能很难维护。
您也许可以扎根app
对象的内部来获取所需的功能,但是请注意,这种方法的不稳定性将意味着您的解决方案可能会因Express的非重大更新而被破坏。