如何在 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 并查看记录到控制台的解码令牌。
我想将认证过程从所有路由移动到一个路由(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 并查看记录到控制台的解码令牌。