当前位置: 首页 > 后端技术 > Node.js

实现前后端分离的心得

时间:2023-04-03 17:04:42 Node.js

实现前后端分离的心得对于现在的web来说,前后端分离越来越流行,越来越多的企业/网站开始往这个方向发展。那么,为什么要选择前后端分离呢?前后端分离对于实际开发有什么好处?为什么选择前后端分离?在以往的传统网站开发中,前端一般只起到切图的作用,简单地将UI设计师提供的原型实现成静态HTML。页面,以及具体的页面交互逻辑,比如与后台的数据交互等,可能是由开发者在后台实现,也可能是前端与后台紧耦合。比如以前淘宝的Web基本都是基于MVC框架webx,架构决定了前端只能依赖后端。所以他们的开发模式还是前端写静态demo,后端翻译成VM模板。这个模型的问题我就不说了,被吐槽了很久。并且更有可能由后台人员直接打理前端工作,在开发页面的同时实现API接口,并在两者之间切换,根据不同的url动态拼接页面,也大大增加了开发难度对背景的压力。前端和后端工作分配不均。不仅开发效率慢,而且代码难以维护。如果前后端分离,可以很好的解决前后端分工不均的问题,将更多的交互逻辑分配给前端处理,而后端可以专注于自己的工作,比如提供API接口,进行权限控制和计算等。前端开发者可以使用nodejs搭建自己的本地服务器,直接在本地开发,然后通过一些插件将API请求转发到后台,这样就可以完全模拟线上场景和后台解耦。前端可以独立完成与用户交互的全过程,两者可以同时开始工作,互不依赖,开发效率更快,分工更均衡。如何分离前后端(以下内容根据我们的电影购票网站进行讨论)前端技术框架为:vue全家桶+nodejs+express(实现了单页(SPA)应用)首先,首先明确区分前后端工作前端工作:实现整个前端页面和交互逻辑,使用ajax与nodejs服务器(中间层)进行交互后端工作:提供API接口,使用redis来管理session,和数据库进行交互我们整个项目的一个框架如下:接下来进入正题,如何实现前后端分离。一般来说,要实现前后端分离,前端需要在本地开一个服务器运行自己的前端代码,这样才能模拟真实的线上环境,而且,也是为了更好的开发。因为在你实际开发中,你不可能让每个前端都搭建一个java(php)环境,在java环境下开发。对于前端来说,学习成本太高了。但是如果本地没有启用服务器,不仅不能模拟线上环境,还会面临跨域问题,因为如果你写一个静态的html页面,直接在文件目录下打开,是无法发送ajax请求的(浏览器)跨域限制),因此,你需要在本地运行一个服务器,但又不想搭建一个陌生庞大的java环境,怎么办?nodejs正好解决了这个问题。在我们的项目中,我们使用nodejs的express框架开一个本地服务器,然后使用nodejs的一个http-proxy-middleware插件,将客户端发给nodejs的请求转发到真实服务器,让nodejs成为一个中间件层。这样就可以无忧无虑地开发前端了。由于前后端分离,前后端同时开发时,可能会遇到前端已经开发了一个页面,却在等待后台API接口的情况.比如A负责前端,B负责后台。A可能要花一周时间完成基本结构,API接口需要调试好才能继续开发,但是此时B还没有实现需要的接口。遇到这种情况,我该怎么办?在我们的项目中,我们通过mock提供了一些假数据。我们先规定API接口,设计一套API文档,然后就可以使用mock(http://mockjs.com)返回一些...,这样从发送API到接收响应的整个过程可以模拟,前端不需要依赖后端开发,可以独立开发。后台所有的API都设计好之后,就可以比较快速的联调了。为什么引入nodejs作为中间层?我之前贴的项目结构图可以看出,在这个项目中,我们使用nodejs作为中间层。那么,为什么要专门介绍nodejs呢?直接用java做不行吗?我觉得引入nodejs主要是为了分层开发和职责划分。nodejs作为前端服务器,负责前端开发人员。前端开发人员不需要知道java后台是如何实现的,也不需要知道API接口是如何实现的。我们只需要关心我们的前端开发工作,管理好nodejs前端服务器,后台开发人员不需要考虑前端是怎么部署的。他只需要做自己擅长的事情,提供好的API接口即可;nodejs本身具有异步和非阻塞I/O的独特特性,这意味着它特别适用于I/O密集型操作,具有比较强的处理大并发请求的能力。因此,将其作为前端服务器,向客户端提供静态文件服务,响应客户端的请求,我认为这是一个非常好的选择。如何部署前端服务器前端服务器的职责是作为静态文件服务器。当用户访问网站时,将index.html及其引入的js、css、字体、图片返回给用户。后台服务器其实前端服务器的部署还是比较简单的。具体有两点:使用webpack将开发好的前端代码打包成静态压缩文件放在服务器上,使用pm2负载均衡器执行如下代码启动服务器:(PS:其实还有一种使用nginx做反向代理的方式,负责转发请求,根据客户端访问的url将请求转发到不同的服务,比如访问/api/*的请求,直接转发到后台即可service,访问其他请求,转发给nodejs服务)以上是我对前后端分离的一些看法,以及一些实践。如果您有什么好的想法,欢迎交流。本项目代码地址为:https://github.com/chenjigeng...由于本项目后台服务已经下线,本项目无法运行。仅供参考,本文地址为->本人博客地址,欢迎入手或关注