laravel路由中间件
本篇文章给大家谈谈实现koa路由中间件,以及laravel路由中间件对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
1、Koa中间件使用之koa-cors
2、koa 中间件的执行包括路由执行吗
3、koa的中间件
4、如何理解 koa 中间件执行机制
Koa中间件使用之koa-cors
跨域资源共享(Cross-Origin Resource Sharing)是一种机制,用来允许不同源服务器上的指定资源可以被特定的Web应用访问。
同源是指不同的站点间,域名、端口、协议都相同,浏览器的同源策略(same-origin policy)出于安全原因,会限制浏览器的跨源 HTTP 请求。
Web应用向服务器请求资源时,由于同源策略限制,Web应用程序只能从同一个域请求 HTTP 资源。如果服务器和Web应用不在同一个域,会发起一个跨域 HTTP 请求。
当响应报文包含了正确CORS响应头, Web应用程序才能从跨域的服务器加载资源。
Koa-cors 是基于 node-cors 开发的 Koa CORS中间件。
koa 中间件的执行包括路由执行吗
在koa里定义的middleware均为generator function(包括内置在顶端的respond),这是为了能从任意middleware中容易地切换到其它middleware里(如果你是前端程序员,可以理解为浏览器捕获事件的capture和propagation过程,如果你是python程序员,可以理解为jungle的middleware机制,如果你是Java程序员,这种方式则是典型的切面编程)。
为了实现这种横穿多个middleware的特性,koa通过把后一个generator作为参数(koa里常用next)传入前一个generator实现(#见koa-compose源码,这也是为什么前两个middleware有next参数而最后一个没有)。
可以看到,在koa中yield的使用是在co,而co则是包装了generator/yield Promise以模拟async/await,提供了一个更高层次的异步语法抽象。
koa在加载且合并所有的middleware之后,传递给co执行(确切地说是在http.createServer的callback触发后执行),co以图中所示逻辑不断拆解generator function,执行yield右侧固定的几种表达式(Array,Object,generator function,Promise,thunkify function),这5种表达式最终都会转化为Promise,以达到处理异步函数的目的。
co内部封装了onFulfilled和onRejected函数,当yield右侧的promise resolve之后,则会调用onFullfield函数,其包含了一条关键语句gen.next(res)#这句代码 用以给yield表达式赋值并执行下一次迭代。
koa通过上文的方式「深入」-「浅出」,最终在顶层的respond middleware里send response。
注:#thunk是co先前版本处理异步函数的方式,通过thunk可以将异步函数封装成curry,传入普通参数后形成仅需要callback参数的偏函数,以此简化callback调用代码(目前co中的thunk偏函数已经被#无情地Promise化了)。
koa的中间件
由 Express 原班人马打造的 koa,致力于成为一个更小、更健壮、更富有表现力的 Web 框架。使用 koa 编写 web 应用,通过组合不同的 generator,可以免除重复繁琐的回调函数嵌套,并极大地提升常用错误处理效率。Koa 不在内核方法中绑定任何中间件,它仅仅提供了一个轻量优雅的函数库,使得编写 Web 应用变得得心应手。
中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源。中间件位于客户机/ 服务器的操作系统之上,管理计算机资源和网络通讯。是连接两个独立应用程序或独立系统的软件。相连接的系统,即使它们具有不同的接口,但通过中间件相互之间仍能交换信息。执行中间件的一个关键途径是信息传递。通过中间件,应用程序可以工作于多平台或OS环境。
koa的中间件采用的是洋葱模型,每一次对于程序的访问,都会从外向内依次经过每一个中间件,再依次由内向外。
下面实现一个用户记录用户访问记录,服务返回时间的中间件为例。
await next 意思就是跳过当前的程序执行下一个中间件, 所以当用户访问该程序时打出的日志就是1-3-5-4-2
如何理解 koa 中间件执行机制
在我眼中,koa的确是比express轻量的多,koa给我的感觉更像是一个中间件框架,koa只是一个基础的架子,需要用到的相应的功能时,用相应的中间件来实现就好,诸如路由系统等。一个更好的点在于,express是基于回调来处理,至于回调到底有多么的不好,大家可以自行搜索来看。koa1基于的co库,所以koa1利用Generator来代替回调,而koa2由于node对async/await的支持,所以koa2利用的是async/await。关于async以及co库等,大家可以参考我之前写过的一篇文章(理解async)。koa可以说是一个各种中间件的架子,下面就来看一下koa对于中间件部分的实现:
koa1主要利用的是Generator来实现,一般来说,koa1的一个中间件大概是长这个样子的:
app.use(function *(next){
console.log(1);
yield next;
console.log(5);
});
app.use(function *(next){
console.log(2);
yield next;
console.log(4);
});
app.use(function *(){
console.log(3);
});
实现koa路由中间件的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于laravel路由中间件、实现koa路由中间件的信息别忘了在本站进行查找喔。
-
微信网名英文带翻译(微信网名英文带翻译霸气)
朋友们好,刘怡发来为大家解答以上问题。微信网名英文带翻译很多人还不知道,现在让我们一起来看看吧1、resign (认命)2、akoasm(幻听)3、unfair(偏心)4、be
2022-06-05阅读:1 -
绝地求生的英文名(绝地求生的英文名缩写)
朋友们好,黄芸欢来为大家解答以上问题。绝地求生的英文名很多人还不知道,现在让我们一起来看看吧1、resign (认命)2、akoasm(幻听)3、unfair(偏心)4、bea
2022-06-04阅读:1 -
潮流的欧美潮网名有范儿(最新潮流英文网名)
朋友们好,张怡伶来为大家解答以上问题。潮流的欧美潮网名有范儿很多人还不知道,现在让我们一起来看看吧1、Akoasm(幻听)2、Dimples(酒窝)3、Fairy.(仙女)4、
2022-06-03阅读:0 -
刺激战场军团名字英文(刺激战场霸气名字大全英文名)
朋友们好,周孟儒来为大家解答以上问题。刺激战场军团名字英文很多人还不知道,现在让我们一起来看看吧1、resign (认命)2、akoasm(幻听)3、unfair(偏心)4、b
2022-05-30阅读:1 -
koalas怎么读(koalas怎么读音)
朋友们好,彭郁婷来为大家解答以上问题。koalas怎么读很多人还不知道,现在让我们一起来看看吧1、koalas英[kəʊˈɑːləz]美[koʊˈɑləz]n.树袋熊; 考拉;
2022-05-30阅读:13