对目前的web来讲,先后端分离已经变得愈来愈流行了,愈来愈多的企业/网站都开始往这个方向靠拢。那么,为何要选择先后端分离呢?先后端分离对实际开发有什么好处呢?php
(如下的内容都是基于咱们的电影购票网站来讨论的)
前端的技术框架是: vue全家桶+nodejs+express(实现的是单页面(SPA)应用)
首先,先分清楚先后端的工做css
咱们项目的整一个架构以下:html
接下来进入正题,如何实现先后端分离前端
通常来讲,要实现先后端分离,前端就须要开启一个本地的服务器来运行本身的前端代码,以此来模拟真实的线上环境,而且,也是为了更好的开发。由于你在实际开发中,你不可能要求每个前端都去搭建一个java(php)环境,而且在java环境下开发,这对于前端来讲,学习成本过高了。但若是本地没有开启服务器的话,不只没法模拟线上的环境,并且还面临到了跨域的问题,由于你若是写静态的html页面,直接在文件目录下打开的话,你是没法发出ajax请求的(浏览器跨域的限制),所以,你须要在本地运行一个服务器,但是又不想搭建陌生而庞大的java环境,怎么办法呢?nodejs正好解决了这个问题。在咱们项目中,咱们利用nodejs的express框架来开启一个本地的服务器,而后利用nodejs的一个http-proxy-middleware插件将客户端发往nodejs的请求转发给真正的服务器,让nodejs做为一个中间层。这样,前端就能够无忧无虑的开发了vue
因为先后端分离后,前端和后台同时开发时,就可能遇到前端已经开发好一个页面了,但是却等待后台API接口的状况。好比说A是负责前端,B是负责后台,A可能用了一周作好了基本的结构,而且须要API接口联调后,才能继续开发,而此时B却尚未实现好所须要的接口,这种状况,怎么办呢?在咱们这个项目里,咱们是经过了mock来提供一些假数据,咱们先规定好了API接口,设计出了一套API文档,而后咱们就能够经过API文档,利用mock(http://mockjs.com)来返回一些假数据,这样就能够模拟发送API到接受响应的整一个过程,所以前端也不须要依赖于后端开发了,能够独立开发,等到后台的API所有设计完以后,就能够比较快速的联调。java
前面的我发的项目结构图中,已经代表,在这个项目里,咱们将nodejs做为中间层,那么,为何咱们要特意引入nodejs呢?直接用java作不就好了吗?node
nodejs前端服务器的职责webpack
其实前端服务器的部署工做是算比较简单的,具体有如下两个点:nginx
评论区有人提到有一个不错的文章,我看了下以为写得确实很详细,你们也可能看一下:https://segmentfault.com/a/1190000009329474?_ea=2038402 (感受这就是业务与专业的区别哈哈)
(PS:其实也有一个作法,就是用nginx来作反向代理,负责转发请求,根据客户端访问的url把这个请求转发到不一样的服务,好比访问/api/*的请求,就转发到后台服务,访问其它的请求,就转发到nodejs服务)
以上,就是我对于先后端分离的一些见解,以及一些实践,若是你们有什么好的想法,欢迎交流。本次项目代码的地址为:https://github.com/chenjigeng/filmshoppinggit
本文地址在->本人博客地址, 欢迎给个 start 或 follow