Koa中的中间件无论写在什么地方都会优先去匹配
await next()/next() 会执行下一个路由,再返回来执行后续代码
注意:放置在所有中间件的后面
app.use(router.routes())
.use(router.allowedMethods());
应用中间件:
app.use(async (ctx,next)=>{
...
await next()
...
})
路由中间件:
相同路由会先匹配第一个,第一个若无返回值会报404的错误
router.get('/x',async(ctx,next)=>{
...
await next();
})
router.get('/x',async(ctx,next)=>{
....
})
代码示例:
const Koa=require('koa');
const Router=require('koa-router');
const app=new Koa();
const router=new Router();
//应用中间件
app.use(async (ctx,next)=>{
console.log('中间件');
await next();
if(ctx.status==404)
{
ctx.status=404;
ctx.body='this is 404';
}
})
//放置在所有中间件的后面
app.use(router.routes())
.use(router.allowedMethods());
router.get('/',async(ctx,next)=>{
ctx.body='hello';
}).get('/news',async(ctx,next)=>{
ctx.body='news';
})
//路由中间件
router.get('/det',async(ctx,next)=>{
// ctx.body='det1';
console.log('aaa');
await next();
})
router.get('/det',async(ctx,next)=>{
ctx.body='det2';
})
router.get('/msg',async(ctx,next)=>{
ctx.body=ctx.query.id;
})
//动态路由
router.get('/home/:aid/:aic',async(ctx,next)=>{
ctx.body=ctx.params.aid+ctx.params.aic;
})
app.listen(3000,()=>{
console.log('this koa server is running at http://localhost:3000/');
})