文章目录

  • Koa路由
    • 什么是路由?
    • 路由的安装
    • 路由的匹配
  • koa动态路由
  • 中间件
    • 什么是中间件
    • 中间件的功能
      • 应用级中间件
      • 路由中间件
      • 错误机制处理中间件
    • koa中间件的执行顺序——洋葱模型

Koa路由

什么是路由?

一路径加一方法(路径URL+特定HTTP方法),也就是说路由是根据不同的URL地址,加载不同的页面并实现不同的功能

路由的安装

Koa中的路由我们需要安装koa-router路由模块来实现,在cmd中输入如下指令

安装指令:npm install --save koa-router

路由的匹配

安装完成后,我们进行路由的匹配,主要分为三步:

  1. 引入所需模块
  2. 规划路由
  3. 启动路由

先看第一步:引入所需模块

var Koa=require(“koa”);              //*引入koa框架*var router=require(“koa-router”);    //*引入路由模板*var app=new koa();

再看一下第三步: 启动路由

app.use(router.routes())             //*使用router.routes()必须先定义好它的routes*app.use(router.allowedMethods())     //*可配置可不配置,官方文档的推荐用法*

具体的定义也就是 规划路由

router.get('/',async(ctx)=>{ctx.body="首页";
})
router.get('/news',async(ctx)=>{ctx.body="新闻页面";
})

①这里ctx是context的缩写,在中文翻译中是上下文的意思,我们可以把它理解为request和response沟通的环境,req和res这两个属性是之前express框架使用的方式,现在koa把它们都封装到ctx中
②body是http协议中的响应体,header是指响应头
③ctx.body=ctx.res.body=ctx.response.body(ctx.body属性也就是发送给用户的内容)
④‘/’表示首页
最后一定不要忘了连接端口!

app.listen(3002);                    //这里选了3002端口

整段代码是这个样子的:

var koa = require('koa');
var router = require('koa-router')();
var app=new koa();router.get('/',async(ctx)=>{ctx.body="首页";
})
router.get('/news',async(ctx)=>{ctx.body="新闻页面";
})app.use(router.routes());
app.listen(3002);

测试一下,在网址里输入localhost:3002看一下效果

再加个news看看效果

这样一个简单的路由使用就完成了~

koa动态路由

请求方式——http://域名/模块名/参数(下面的例子中设置了两个参数)

router.get('/newscontent',async(ctx)=>{console.log("这是新闻2");
})
router.get('/newscontent/:aid/:cid',async(ctx)=>{console.log(ctx.params);ctx.body="新闻详情";
})                               //注意一下这里两个参数的设置方式

瞅一眼效果

后台是这个样子的

中间件

什么是中间件

配合路由匹配完成所做的一系列操作就叫中间件

中间件的功能

执行任何代码
修改请求和响应对象
终结请求-相应循环
调用堆栈里的下一个中间件

应用级中间件

app.use是express调用中间件的方法,所谓中间件就是处理HTTP请求的参数,用来完成各种特定的任务比如检查用户是否登录,分析数据,以及其他的需要最终将数据发送给 用户之前完成的任务。app.use()里面使用的参数主要是函数,这个使用并不是函数调用而是使能的意思,当用户在浏览器发出请求的时候这部分函数才会启用,进行过滤处理

/*匹配路由前打印日期*/
app.use(async(ctx,next)=>{ctx.body='中间件';console.log(new Date());await next();/*当前路由完成以后继续向下匹配,这个中间件可以匹配任何路由,但如果不写next这个路由被匹配了就不会向下匹配*/
})

注:这里的参数next是koa框架调用中间件的方式,直接执行app.use之后再执行下一个app.use,下一个app.use也就是next参数,它是一个函数

路由中间件

路由中间件我们在前面就已经零零星星的见过它了,就是下面这些

router.get('/',async(ctx)=>{ctx.body="首页";
})router.get('/news',async(ctx)=>{ctx.body="新闻列表页面";
})router.get('/newscontent/:aid/:cid',async(ctx)=>{console.log(ctx.params);ctx.body="新闻详情";
})

错误机制处理中间件

在程序执行过程中,会不可避免的出现一些无法预料的失误,错误中间件就是一个集中处理错误的地方

app.use(async(ctx,next)=>{next();if(ctx.status==404){ctx.status=404;ctx.body="这是一个404界面";}else{console.log(ctx.url);}
})

这串代码中显示的便是当访问的数据不存在时,在浏览器上显示这是一个404界面,作为一种对错误的处理

此外还有一个第三方中间件,虽然不会用,但有必要在中间件里留下它的姓名

koa中间件的执行顺序——洋葱模型

先来个图,这个执行顺序的样子就很像横着切开的洋葱,一层一层的

中间件函数队列,会在最后一个中间件或一个没有调用next的中间件那里停止
koa官方文档上把外层的中间件称为"上游",内层的中间件为"下游"
一般的中间件都会执行两次,调用next之前为第一次,调用next时把控制传递给下游的下一个中间件。当下游不再有中间件或者没有执行next函数时,就将依次恢复上游中间件的行为,让上游中间件执行next之后的代码–洋葱模型

举个例子:

var Koa=require('koa');
var router = require('koa-router')();
var app=new Koa();//Koa中间件
app.use(async (ctx,next)=>{console.log('1、这是第一个中间件01');await next();console.log('5、匹配路由完成以后又会返回来执行中间件');
})app.use(async (ctx,next)=>{console.log('2、这是第二个中间件02');await next();console.log('4、匹配路由完成以后又会返回来执行中间件');
})router.get('/',async (ctx)=>{ctx.body="首页";})
router.get('/news',async (ctx)=>{console.log('3、匹配到了news这个路由');ctx.body='这是一个新闻';
})app.use(router.routes());   /*启动路由*/
app.use(router.allowedMethods());
app.listen(3002);

去后台看一下数据,界面如下:

最后转一篇超详细的博客,举了很多个实例,可以更深入的理解koa中间件执行顺序
koa洋葱模型的实例

以上如有写的不正确的地方,还请大家指出,希望可以帮到大家

浅析koa路由及其中间件相关推荐

  1. 浅析深究什么是中间件 发布时间: 2016-06-10 作者:本站编辑 浏览次数:128 摘要: 因为工作的原因,我从金蝶集团调入金蝶中间件公司工作以来,经常遇到一个问题就是中间件公司是个什么

    浅析深究什么是中间件 发布时间: 2016-06-10   作者:本站编辑   浏览次数:128 摘要: 因为工作的原因,我从金蝶集团调入金蝶中间件公司工作以来,经常遇到一个问题就是中间件公司是个什么 ...

  2. nodejs开发 过程中express路由与中间件的理解 - pyj063 - 博客园

    nodejs开发 过程中express路由与中间件的理解 nodejs开发 express路由与中间件 路由 通常HTTP URL的格式是这样的: http://host[:port][path] h ...

  3. NodeJS入门04-Express路由和中间件 - 小之 - 博客园

    nodeJS入门04-Express路由和中间件 Express框架是后台的Node框架,在后台的受欢迎的程度,和jQuery一样,就是企业的事实上的标准. 路由 路由是指如何定义应用的端点(URIs ...

  4. express 路由中间件_Express通过示例进行解释-安装,路由,中间件等

    express 路由中间件 表达 (Express) When it comes to build web applications using Node.js, creating a server ...

  5. php路由中间件,lumen5.5学习路由和中间件(四)

    前几篇了解完从请求到响应的流程后,仔细学习下路由和中间件的玩法 ----------------------------------分割线------------------------------- ...

  6. 渲染静态页面、get请求、post请求、express框架、路由、中间件

    1. 渲染静态页面 const http = require('http'); const fs = require('fs'); const url = require('url'); const ...

  7. 初识洋葱模型,分析中间件执行过程,浅析koa中间件源码

    前言 作为洋葱模型的第一篇文章,这里仅介绍了一些入门级知识,比如 了解洋葱模型执行顺序 分析部分 koa 中间件的源码来加深对中间件的认识 为第二篇文章:分析洋葱模型实现原理,在自己项目中接入洋葱模型 ...

  8. node.js express php,nodejs开发——express路由与中间件

    路由 通常HTTP URL的格式是这样的: http表示协议. host表示主机. port为端口,可选字段,不提供时默认为80. path指定请求资源的URI(Uniform Resource Id ...

  9. express 框架之 路由与中间件

    1.  什么是router路径,什么是middleware? 我们输入www.baidu.com 来访问百度的主页,浏览器会自动转换为 http://www.baidu.com:80/(省略一些参数) ...

最新文章

  1. RandomForestClassifier参数min_samples_leaf和min_samples_split理解
  2. 创业者周鸿祎前传(西安交大时期)
  3. rosdep init和rosdep update出错处理
  4. Android——设置布局的背景颜色
  5. rtklib 后处理_RTKLIB 手册解读及代码调试知识总结
  6. 【工具】支付宝免费卡校验接口调用及常用银行简称整理
  7. ThinkPHP5.1 子查询-使用 Group 获取每组最新数据
  8. 安装office,错误1706。安装程序找不到所需文件。请检查网络连接或CD-ROM驱动器。
  9. 如何将 Excel 数据分组后按次序横向排列
  10. UnicodeEncodeError: 'gbk' codec can't encode character '\uXXX' in position
  11. 【jquery】删除节点 添加节点 找兄弟节点
  12. url中如果有引号的处理
  13. CentOS服务器的安装
  14. 计算机怎么查询隐藏的字体,Win10怎么隐藏不使用的字体?隐藏字体的方法
  15. linux下IIC驱动解释
  16. linux4==阿里云ECS centos8部署redis6.2.6伪集群
  17. SEO优化技巧,并不是词库排名优化操作那么简单!
  18. 营销值得学:普通人怎么创业?创业需要具备哪些能力?
  19. 树莓派+ubuntu18.04+ROS-melodic+MAVROS+librealsense+vio+realsense_ros
  20. java IDE 工具启动tomcat 时 启动不起来 一直报错的一个原因

热门文章

  1. 微软AI秀肌肉:Windows之后,用Azure收割市场
  2. 在线英语单词词根查询!
  3. 搜刮的好东西:网站运营管理策划书模版
  4. ARC,block,protocol,代理设计模式
  5. Gavin老师Transformer直播课感悟 - Rasa项目实战之电商零售智能业务对话机器人ResponseSelector使用详解与Debugging演示(八十八)
  6. voliate解决重排序
  7. Points-to analysis工具Doop的基本使用(2)
  8. 2020R1快开门式压力容器操作作业考试题库及R1快开门式压力容器操作模拟考试题库
  9. SSH无密登录原理及配置方法
  10. Python(1) 概述与环境安装