javascript的节点中间件原理是什么?这个问题可能是我们日常学习或工作经常见到的。希望通过这个问题能让你收获颇深。下面是小编给大家带来的参考内容,让我们一起来看看吧!
中间件是介于应用系统和系统软件之间的一类软件,它使用系统软件所提供的基础服务(功能),衔接网络上应用系统的各个部分或不同的应用,能够达到资源共享,功能共享的目的。
在<强> NodeJS 强>中,<强>中间件强>主要是指封装<强> http 强>请求细节处理的方法。我们都知道在<强> http 强>请求中往往会涉及很多动作,如下:
- <李> IP筛选李> <>李查询字符串传递李> <李>请求体解析李> <李>饼干信息处理李> <>李权限校验李> <李>日志记录李> <李>会话管理中间件(会话)李> <李> gzip压缩中间件(如压缩)李> <李>错误处理李>
当然还有很多自定义的处理动作。对于<强> Web 强>应用而言,我们并不希望了解每一个细节性的处理工作,而是希望能够把主要精力集中在业务的开发上,以达到提升开发效率的目的,所以引入了<强>节点中间件强>来简化和封装这些基础逻辑处理细节。
<>强节点中间件强>本质上就是在进入具体的业务处理之前,先让<强>特定过滤器>强处理。如下图所示:
我们目前看到的主流nodejs框架,比如<强> >强连接,<强>高雅强>,<强> >强,表达<强>鸡蛋强>,<强>巢强>等,都离不开中间件的设计概念,所以为了能让大家更深入的窥探nodejs世界,我们就非常有比较研究中间件的实现原理。
正文
在了解节点中间件的概念之后,我们就来手动实现一下中间件,最后我们会简单分析一下高雅中中间件的实现思路。文章大纲如下:
- <李>节点中间件核心原理实现李> <李>高雅中间键实现方式李> <李>利用高雅中间件机制实现一个自己的高雅中间件李>
节点中间件核心原理实现
由上文介绍可知中间件是从http请求开始到响应结束过程中的处理逻辑,通常需要对请求和响应进行处理。我们在实现节点中间件模式时还需要考虑的一个问题就是多中间件共存的问题,我们要思考如何将多个中间件的执行自动化,不然在请求到响应的过程中只会执行最开始的中间件,所以我们基本的中间件形式如下:
const中间件=(点播,res,下一个)=比;{//请求处理逻辑 next () }复制代码
接下来我们先写个简单的案例来看看中间件是如何实现的。
m1 m2运行 m3运行复制代码
以上即实现了基本中间件的执行模式,但是我们还需要考虑异步的问题,如果中间件还依赖第三发模块或者api的支持,比如验证,识别等服务,我们需要在该异步中间件的回调里执行接下来,才能保证正常的调用执行顺序,如下代码所示:
const m2=(点播,res,下一个)=比;{ fetch (& # 39;/xxxxx # 39;)。然后(res=比;{ next () }) }复制代码
还有一种中间件场景,比如说日志中间件,请求监控中间件,它们会在业务处理前和处理后都会执行相关逻辑,这个时候就要求我们需要能对下强> <强>函数进行二次处理,我们可以将接下来的返回值包装成<强> 强>承诺,使得其在业务处理完成之后通过<强>然后强>回调来继续处理中间件逻辑。如下所示:
函数useApp(点播,res) {const下=()=比;{const中间件=middlewares.shift()如果(中间件){//将返回值包装为承诺对象 回报的承诺。解决(中间件(点播,res,下一个)) 其他}{返回Promise.resolve(“以何种) } } next () }复制代码javascript的节点中间件原理是什么