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?