首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在全路由中间件Koa-router中获取映射后的路由参数

在全路由中间件Koa-router中获取映射后的路由参数
EN

Stack Overflow用户
提问于 2020-04-20 03:16:49
回答 1查看 551关注 0票数 0

我正在编写一个库,它为所有路由添加验证,以便与koa-router一起使用。

在我的routes/index.js文件中,在运行任何路由之前,我能够通过使用以下代码获得我想要的大部分内容:

代码语言:javascript
复制
    let routePath = ctx._matchedRoute as string;

    if (!routePath) {
        return next();
    }

    // Strip trailing slash and replace colon with underscore
    let routeName = routePath.replace(/\/$/, "").replace(/:/g, "_");
    let schemaName = `/requests/${ctx.method}${routeName}.json`;

    if (!hasSchema(schemaName)) {
        return next();
    }

    try {
        await validate(schemaName, {
            query: ctx.query,
            params: ctx.params,
            body: ctx.request.body,
            headers: ctx.headers
        });

        return next();
    } catch (err) {
        throw err;
    }

不幸的是,ctx.params似乎只填充了“下游”,所以在要执行的路由处理程序级别。我希望能够访问这些参数,而不必在每个路由处理程序之前定义我的中间件。有没有办法做到这一点?

EN

回答 1

Stack Overflow用户

发布于 2020-04-20 03:21:53

你基本上有两个选择:

  1. 使用与koa-route解析路由并从urls中提取这些参数相同的库。
  2. 使用您自己的中间件包装koa- route,因此您有可能成为在koa-route之后被调用的第一个中间件,然后调用常规的路由后中间件。

我认为这两个都是有效的选择。如果性能非常重要,您可能会对选项2有更多的了解,因为您不需要对路由进行两次解析。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61310216

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档