Node Koa Как передать параметр в промежуточное ПО?

Преобразование моего Express-приложения в Koa ...

Я гуглил и я гуглил, я не могу найти, как передать дополнительные параметры в промежуточное программное обеспечение Koa. Например...

router.post('/', compose([
    Midware.verifyAuthToken, 
    Midware.bodySchemaTest(UserController.bodyAttribs),
    Midware.injectionTest
]), UserController.postNew);

Мне нужно отправить имена переменных bodyAttribs (массив строк) в промежуточное программное обеспечение bodySchemaTest, и я не знаю, как это сделать в Koa.

Я сейчас пробую Коа. Поделитесь, пожалуйста, своим опытом :-)


person Locohost    schedule 29.09.2018    source источник


Ответы (1)


Хорошо, я сам разобрался. Не уверен, что это разумный или «правильный» способ сделать это, но решение для меня заключалось в создании части промежуточного программного обеспечения в каждом контроллере, который устанавливает ожидаемые атрибуты схемы в 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();
};
...

Таким образом, каждый контроллер предоставляет настраиваемое промежуточное ПО, которое устанавливает настраиваемые атрибуты bodyAttribs, которые я хочу проверить. Вы можете использовать этот подход, чтобы установить и передать 1 любому количеству дополнительных параметров, независимо от того, что вам нужно, в ctx.state, который всегда переходит к следующему промежуточному программному обеспечению в цепочке. Следовать? :-)

person Locohost    schedule 30.09.2018