如何在 koa-router 路由之间传递值

How can I pass values between koa-router routes

我想将认证过程从所有路由移动到一个路由(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
});

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 并查看记录到控制台的解码令牌。