用一段代码演示,有助于理解koa的洋葱模型,访问如下两个地址:
http://localhost:3000/#aid:222/#aname:333
http://localhost:3000/news/222/333
结合源码看后台打印的效果。
const Koa = require('koa')
const router = require('koa-router')() //直接实例化的写法,不需要再new了
const app = new Koa()
// const router = new Router()
//路由级中间件
router.get('/',async (ctx,next)=>{
console.log('3、路由级中间件拦截:'+new Date())
await next()
console.log('返回3、路由级中间件拦截:'+new Date())
})
//路由
router.get('/', async (ctx)=>{//http://localhost:3000/#aid:222/#aname:333
ctx.body = '首页+动态路由:get传值'
console.log('4、干正事儿*********')
console.log(ctx.query)
})
.get('/news/:aid/:aname', async (ctx)=>{//http://localhost:3000/news/222/333 //二级页面,不受一级页面拦截
ctx.body = '二级页面:新闻页+动态路由restful传值'
console.log('4、二级页面·干正事儿*********')
console.log(ctx.params)
})
//应用级中间件,不受代码位置影响,优先于路由中间件(app.get等)执行
app.use(async (ctx,next)=>{
console.log('1、应用级中间件拦截:'+new Date())
await next()
console.log('返回1、应用级中间件拦截:'+new Date())
if(ctx.status==404){
ctx.status=404
ctx.body='404 404 404 404 404 404 404 404 '
}
})
app.use(async (ctx,next)=>{
console.log('2、应用级中间件二')
await next()
console.log('返回2、应用级中间件二')
})