Хорошо, я сам все решил.Не уверен, что это умный или «правильный» способ сделать это, но для меня было решение создать в каждом контроллере промежуточное ПО, которое устанавливает ожидаемые атрибуты схемы в ctx.state .bodyAttribs.
Вот так ...
// /src/routers/user.router.ts
import * as UserController from '../controller/user.controller';
import * as Midware from './middleware';
import Router from 'koa-router';
import compose from 'koa-compose';
const router = new Router();
router.prefix('/user');
router.get('/', Midware.verifyAuthToken, UserController.getAll);
router.post('/', compose([
UserController.bodyAttribs,
Midware.verifyAuthToken,
Midware.bodySchemaTest,
Midware.injectionTest,
]), UserController.postNew);
module.exports = router;
// /src/controller/user.controller.ts
import { Context } from 'koa';
import { UserData } from '../data/mongo/user.data.mongo';
import { UserModel } from '../model/user.model';
import { EmailValidate } from '../service/email-validate.service';
import * as Logger from '../util/logger';
const dataContext = new UserData();
// Middleware to set bodyAttribs
export const bodyAttribs = async (ctx: Context, next: any) => {
ctx.state.bodyAttribs = ['handle', 'processUserOptions', 'name', 'email', 'pass', 'passConfirm'];
return await next();
};
...
Таким образом, каждый контроллер предоставляет пользовательское промежуточное ПО, которое устанавливает пользовательские атрибуты body, которые я хочу проверить.Вы можете использовать этот подход для установки и передачи 1 для любого количества дополнительных параметров, в зависимости от того, что вам нужно, в ctx.state, который всегда переходит к следующему промежуточному программному обеспечению в цепочке.Следить?: -)