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