博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Koa 2 初体验(二)
阅读量:4084 次
发布时间:2019-05-25

本文共 2386 字,大约阅读时间需要 7 分钟。

Koa2 路由

Koa2 原生路由的实现

路由在web中的作用不言而喻,而要先实现原生路由,需要的到地址栏输入的路径,然后再根据路径不同进行跳转。而在Koa2中,我们可以用 ctx.requerst.url 来实现获取访问路径:

const Koa = require('koa')const app = new Koa()app.use(async(ctx) => {    const url = ctx.request.url    ctx.body = url })app.listen(3000, () => {    console.log('demo3 is run')})

加入我们的文件结构是这样的:

├── demo3.js├── package.json└── view    ├── register.html    ├── index.html    └── login.html

我们就可以这样来实现原生路由:

const Koa = require('koa')const fs = require('fs')const app = new Koa()function render(page) {    return new Promise((resolve, reject) => {        let viewUrl = `./view/${page}`        fs.readFile(viewUrl, "binary", (err, data) => {            console.log(1)            if (err) {                reject(err)            } else {                resolve(data)            }        })    })}async function route(url) {    let view = '404.html'    switch(url) {        case '/':            view = 'index.html'            break        case '/login':            view = 'login.html'            break        case '/register':            view = 'register.html'            break        case '/index':            view = 'index.html'            break        default:            break    }    let html = await render(view)    return html}app.use(async(ctx) => {    const url = ctx.request.url    let html = await route(url)    ctx.body = html})app.listen(3000, () => {    console.log('demo3 is run')})

通过上面的代码,我们成功实现了一个路由切换的功能,但这样写无疑是不够优雅的,且也只是在原理上的实现,不足以应付我们日常开发中所遇到的种种问题。因此我们和上次一样,还是需要引入中间件来达成我们的目标。

koa-router

首先我们需要下载 koa-router 中间件:

cnpm i koa-router --save

然后我们就能通过koa-router来优雅的进行路由调换了:

const Koa = require('koa')const fs = require('fs')const app = new Koa()const Router = require('koa-router')let home = new Router()home.get('/', async ( ctx ) => {    let html = `        
` ctx.body = html})// 子路由2let page = new Router()page.get('/404', async ( ctx )=>{ ctx.body = '404 page!'}).get('/helloworld', async ( ctx )=>{ctx.body = 'helloworld page!'})// 装载所有子路由let router = new Router()router.use('/', home.routes(), home.allowedMethods())router.use('/page', page.routes(), page.allowedMethods())// 加载路由中间件app.use(router.routes()).use(router.allowedMethods())app.listen(3000)console.log('demo4 is run')

 

作者:srtian
链接:https://www.jianshu.com/p/71a74c53a225
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

你可能感兴趣的文章
奇异值分解(SVD)的原理详解及推导
查看>>
算法数据结构 思维导图学习系列(1)- 数据结构 8种数据结构 数组(Array)链表(Linked List)队列(Queue)栈(Stack)树(Tree)散列表(Hash)堆(Heap)图
查看>>
求LCA最近公共祖先的离线Tarjan算法_C++
查看>>
Leetcode 834. 树中距离之和 C++
查看>>
【机器学习】机器学习系统SysML 阅读表
查看>>
最小费用最大流 修改的dijkstra + Ford-Fulksonff算法
查看>>
最小费用流 Bellman-Ford与Dijkstra 模板
查看>>
实现高性能纠删码引擎 | 纠删码技术详解(下)
查看>>
scala(1)----windows环境下安装scala以及idea开发环境下配置scala
查看>>
zookeeper(3)---zookeeper API的简单使用(增删改查操作)
查看>>
zookeeper(4)---监听器Watcher
查看>>
zookeeper(2)---shell操作
查看>>
mapReduce(3)---入门示例WordCount
查看>>
hbase(3)---shell操作
查看>>
hbase(1)---概述
查看>>
hbase(5)---API示例
查看>>
SSM-CRUD(1)---环境搭建
查看>>
SSM-CRUD(2)---查询
查看>>
SSM-CRUD (3)---查询功能改造
查看>>
Nginx(2)---安装与启动
查看>>