1.2 KoaRouter

路由使用

/*
 * @Author: yu-lei 
 * @Date: 2019-08-22 20:02:15 
 * @Last Modified by: yu-lei
 * @Last Modified time: 2019-08-22 23:06:14
 */

 /**
  * 包区域
  */
const koa =require('koa')
const koaRouter = require('koa-router')
const koaBodyparser = require('koa-bodyparser')


/**
 * 定义区域
 */
const app =new koa()
const router = new koaRouter()

/**
 * 文件区域
 */
//路由

const userRoutes = require('./routers/users')()
const homeRoutes = require('./routers/homes')()




/**
 * 中间件
 */
app.use(koaBodyparser())
app.use(router.routes())
app.use(homeRoutes.routes())
app.use(userRoutes.routes())
app.use(router.allowedMethods()) //开启所有的请求方法

/**
 * 服务器
 */
app.listen(3000, () =>{
    console.log("服务器已经开启!")
})

路由匹配方式

router.all('/*' , async (ctx,next) =>{
    console.log(ctx.url)
    // 决绝特殊访问服务
    // 搜索引擎优化 
    //roubat
    // 过滤服务 
    await next()
})
router.get()// get|put|post|patch|delete|del|all
router.regiest('path','GET',(ctx.next)=>{}) // 注册方法

路由的三种传递参数方式

通过动态router 传递

通过ctx.params.id 获取

 router.get('/home/:id',async (ctx,next) =>{
        ctx.body="<h1>home route</h1>"
        console.log(ctx.params.id) // 

    })

通过query 字符串传递

通过ctx.query.参数名称获取

 router.get('/home',async (ctx,next) =>{
        ctx.body="<h1>home route</h1>"
        console.log(ctx.query.id) // 

    })

通过post 传递

通过 koa-bodyparser 内的 ctx.request.body 获取

router.post('/home',async (ctx) =>{
        console.log(ctx.request.body)
        ctx.body=ctx.request.body
        // console.log(ctx.request.body)
    })

redirect

router.redirect('从那个路由',’跳转到那个路由‘,状态码)
// redirect 可能不需要匹配prefex 和父组件也会 匹配到路由跳转

use 嵌套路由

const userRouter = new koaRouter({
    prefix:'/user'
})
userRouter.get('/admin',async ctx=>{
    //todo
})
//中间件使用方法
router.use('/home',userRouter.routes(),userRouter.allowedMethods({配置}))

//请求地址为
// /home/user/admin     显示嵌套的父级路由  然后是子集路由的prefix   然后是接口

router.param(param, middleware)

所有带有id 参数的路由全部需要先经过这个路由

const router = new koaRouter({
        prefix:'/home'
    })  //子路由

    router
    // 所有带有id 参数的路由全部需要先经过这个路由
    .param('id',async (id, ctx, next) =>{
        console.log(ctx.path,'param');
        await next()
    })
    .get('/user/:id' , async ctx =>{
        console.log(1,ctx.params.id)

    })
    .get('/haha/:id' , async ctx =>{
        console.log(2,ctx.params.id)

    })
    .redirect('/abc/:id','/haha/1',303)


    return router

Last updated

Was this helpful?