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