博客
关于我
强烈建议你试试无所不能的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
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

你可能感兴趣的文章
ROS的安装(包含文字和视频教程,我的ROS安装教程以这篇为准)
查看>>
国内有个码云,gitee
查看>>
原来我之前一直用的APM固件....现在很多东西明白了。
查看>>
realsense-ros里里程计相关代码
查看>>
似乎写个ROS功能包并不难,你会订阅话题发布话题,加点逻辑处理,就可以写一些基础的ROS功能包了。
查看>>
if __name__ == ‘__main__‘:就是Python里的main函数,脚本从这里开始执行,如果没有main函数则从上到下顺序执行。
查看>>
PX4官方用户和开发手册的首页面是会给你选择英文和中文的
查看>>
网络协议栈我是不是可以这么理解,就是把你要发送的数据自动处理成TCPIP格式的消息发出去,这种底层的转换不需要你弄了。
查看>>
除了LwIP还有uIP
查看>>
《跟工程师学嵌入式开发》这本书最后的终极项目我反而觉得有说头
查看>>
博士的申请考核制
查看>>
那些硬件的初始化函数主要是在做些上什么?
查看>>
MAVLink学习之路05_MAVLink应用编程接口分析(也有讲STM32下的收发函数)
查看>>
找到了中文版的mavlink手册
查看>>
浅谈飞控开发的仿真功能
查看>>
我觉得在室内弄无人机开发装个防撞机架还是很有必要的,TBUS就做得很好。
查看>>
serial也是见到很多次了,似乎它就是一种串行通信协议
查看>>
TBUS的一些信息
查看>>
PX4+激光雷达在gazebo中仿真实现(古月居)
查看>>
专业和业余的区别就在于你在基础在基本功打磨练习花的时间
查看>>