首先跳出前端
要看清node中间层在整个服务承担什么角色,首先咱们要跳出前端的视野,把本身视角提示一个level —— 去鸟瞰整个项目。
互联网时代其实就是信息时代,咱们都是在利用数据交换,来产生价值。
在这个原始的流程之间,咱们有不少事情能够作。来看和前端最近这条线,前端-->后端。
-
代理
-
缓存
-
限流
-
日志
-
监控
-
鉴权
-
路由
-
灰度
-
...
上面列出的是一些咱们一个服务除了前端的展现,service端的网络服务,API的提供,数据落库等以外也要作的部分事情。在先后端没有分离的时代,这些都是交给后端来作,好比Java,PHP等。尤为在以前,套用模板语言就能解决大部分问题的时候,能够说前端不值得单独拿出来作。可是,当谷歌把JavaScript的宿主环境扩展到浏览器之外时,咱们有了更宽泛的选择。
先后端分离
先后端分离几乎是如今开发的必选项。我要放弃传统的MVC模式,解除模板语言的限制,独立构建开发环境,SPA页面作SEO,分离部署依赖,统一API出口去适应更好的适应多端等等…….先后端分离的优劣我就不过多赘述。
在先后端分离的前提下,咱们就能够在服务器(JAVA)和浏览器(JS)中间架一个中间层(NODEJS).
Node中间层
在先后端分离的自然选择下,node中间层能够承担更多的责任。
-
代理:在开发环境下,咱们能够利用代理来,解决最多见的跨域问题;在线上环境下,咱们能够利用代理,转发请求到多个服务端。
-
缓存:缓存实际上是更靠近前端的需求,用户的动做触发数据的更新,node中间层能够直接处理一部分缓存需求。
-
限流:node中间层,能够针对接口或者路由作响应的限流。
-
日志:相比其余服务端语言,node中间层的日志记录,能更方便快捷的定位问题(是在浏览器端仍是服务端)。
-
监控:擅长高并发的请求处理,作监控也是合适的选项。
-
鉴权:有一个中间层去鉴权,也是一种单一职责的实现。
-
路由:前端更须要掌握页面路由的权限和逻辑。
-
服务端渲染:node中间层的解决方案更灵活,好比SSR、模板直出、利用一些JS库作预渲染等等。
-
更多的可能性
这些,都是在有个node中间层的好处,使得服务更加的灵活。固然,node也有不少弊端,若是设计很差,很容易让代码充满 callback 。CPU使用率较重、IO使用率较轻的应用——如视频编码、人工智能等,Node.js的优点没法发挥(在后面的成熟更新中,node对这类问题可能也有比较好的解决方案)。