Получить сопоставленные параметры маршрута в промежуточном ПО для всех маршрутов Koa-router - PullRequest
0 голосов
/ 19 апреля 2020

Я пишу библиотеку, которая добавляет проверку для всех маршрутов, для использования с koa-router.

В моем файле routes/index.js перед выполнением каких-либо маршрутов я могу получить большую часть того, чего хочу достичь, используя следующий код:

    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 кажется, что он заполнен только «вниз по течению», поэтому на уровне исполняемого обработчика маршрута. Я хотел бы получить доступ к этим параметрам без необходимости определять свое промежуточное ПО перед каждым обработчиком маршрута. Есть ли способ добиться этого?

1 Ответ

0 голосов
/ 19 апреля 2020

У вас в основном есть 2 варианта:

  1. Используйте те же библиотеки, которые использует koa-route для разбора маршрута и извлечения этих параметров из URL.
  2. Обертывание koa-route с вашим собственным промежуточное ПО, так что у вас есть возможность быть первым промежуточным ПО, которое называется после koa-route, а затем вызывать обычное промежуточное ПО после маршрутизации.

Обе, на мой взгляд, действительны опции. Если производительность очень важна, вы, вероятно, получите немного больше о варианте 2, так как вам не нужно анализировать маршруты дважды.

...