Как я могу передать значения между маршрутами коа-роутера - PullRequest
0 голосов
/ 24 февраля 2020

Я хотел переместить процедуру аутентификации со всех маршрутов в один маршрут (для этого koa-router предоставляет промежуточное ПО all () для всех методов на маршрутизаторе). Однако в процессе я декодирую токен, декодирование которого мне нужно для дальнейшего выполнения. Как я могу получить доступ к этому декодированному токену с другого маршрута?

const Router = require('koa-router');
const router = new Router({ prefix: '/test' });

router.all('/', async (ctx, next) => {
   //decode
   await next();
})

router.get('/', async ctx=> {
   // Here I need to access decoded, too
});

1 Ответ

1 голос
/ 26 февраля 2020

объект Koa Context инкапсулирует объект запроса, ответа и состояния, а также многое другое. Этот объект состояния является рекомендуемым пространством имен, в котором вы можете передавать данные между промежуточным программным обеспечением.

Модификация предоставленного примера дает:

const http = require('http')
const Koa = require('koa')
const Router = require('koa-router')
const app = new Koa()
const router = new Router({ prefix: '/test' })

router.all('/', async (ctx, next) => {
    // decode token
    const x = 'foo'
    // assign decoded token to ctx.state
    ctx.state.token = x
    await next()
 })

 router.get('/', async ctx=> {
    // access ctx.state
    console.log(ctx.state.token)
 })

 app.use(router.routes())
http.createServer(app.callback()).listen(3000)

Перейдите к http://localhost: 3000 / test и увидеть расшифрованный токен, зарегистрированный на консоли.

...