Koa2 路由

第一步 引入koa 和 fs模块读取html用

const Koa = require('koa')
const app = new Koa()
const fs = require('fs')

//正常操作
app.use(async (ctx) => {
    let url = ctx.request.url
    let html = await route(url)
    ctx.body = html
})

app.listen(3001, () => {
    console.log('router is listen port 3001..')
})

第二步新建几个页面

第三步

//这里没啥好说的
async function route(url) {
    let page = '404.html'
    switch (url) {
        case '/':
            page = 'index.html'
            break
        case '/index':
            page = 'index.html'
            break
        case '/todo':
            page = 'todo.html'
            break
        case '/404':
            page = '404.html'
            break
        default:
            break
    }
    let html = await render(page)
    return html
}

function render(html) {
    //使用promise包一下处理一下异步
    return new Promise((resolove, reject) => {
        let pageUrl = `./page/${html}`
    //参数1:文件路径名,  参数2:二进制,  参数3:回调
        fs.readFile(pageUrl, "binary", (err, data) => {
            if (err) {
                reject(err)
            } else {
                resolove(data)
            }
        })
    })
}

使用koa-router

npm 安装koa-router中间件

npm install --save koa-router

示例代码

const Koa = require('koa')
const Router = require('koa-router')

const app = new Koa()
const router = new Router({
    // 添加路由前缀层级
    prefix: '/cengji'
})

router
    .get('/', (ctx, next) => {
        ctx.body = 'Hello word'
    })
    .get('/todo', (ctx, next) => {
        ctx.body = 'Todo page'
    })


app
    .use(router.routes())
    //router.allowedMethods() 推荐用法:router.allowedMethods()用在了路由匹配router.routes()之后
    // 所以在当所有路由中间件最后调用.此时根据ctx.status设置response响应头
    .use(router.allowedMethods())

app.listen(3333, () => {
    console.log('app is starting at port 3333...')

子路由

const Koa = require('koa');
const app = new Koa();
const Router = require('koa-router');

let aaa= new Router();
    aaa
        .get('/aaa',async(ctx)=>{
            ctx.body="aaa";
        })
        .get('/bbb',async(ctx)=>{
            ctx.body ='bbb';
        })

let bbb= new Router();
      bbb
          .get('/aaa',async(ctx)=>{
              ctx.body="aaa";
          })
          .get('/aaa',async(ctx)=>{
              ctx.body ='bbb';
          })
        
//装载所有子路由
let router = new Router();
router.use('/aaa',home.routes(),home.allowedMethods());
router.use('/bbb',page.routes(),page.allowedMethods());

//加载路由中间件
app.use(router.routes()).use(router.allowedMethods());

app.listen(3000,()=>{
    console.log('[demo] server is starting at port 3000');
});
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容