Как я могу передавать значения между маршрутами koa-router

Я хотел переместить процедуру аутентификации со всех маршрутов в один маршрут (для этого 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
});

person prohit    schedule 23.02.2020    source источник


Ответы (1)


объект 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 и просмотрите декодированный токен, зарегистрированный в консоли.

person Dominic Egginton    schedule 26.02.2020