node前后端分离基本概括

谢玉胜的技术文章 谢玉胜的技术文章     2022-10-14     696

关键词:

技术分享图片

首先从一个重要的概念“模板”说起。 广义上来说,web中的模板就是填充数据后可以生成文件的页面。 严格意义上来说,应该是模板引擎利用特定格式的文件和所提供的数据编译生成页面。模板大致分为前端模板(如ejs)和后端模板(如freemarker)分别在浏览器端和服务器端编译

所谓的前端渲染就是当我们去http请求的时候,我们先去请求到的是模版文件,随后数据才会过来,后端渲染是后端模板和数据结合好了以后整个的传给浏览器

后端 MVC

说起模板渲染,楼主首先接触的其实并不是前端模板引擎,而是后端。后端 MVC 模式中,一般从 Model 层中读取数据,然后将数据传到 View 层渲染(渲染成 HTML 文件),而 View 层,一般都会用到模板引擎,比如楼主项目中用到的 PHP 的 smarty 模板引擎。随便上段代码感受一下。

<div>
  <ul class="well nav nav-list" style="height:95%;">
    {{foreach from=$pageArray.result item=leftMenu key=key name=leftMenu}}
      <li class="nav-header">{{$key}}</li>
      {{foreach from=$leftMenu key=key2 item=item2}}
        <li><a target="main" href=‘{{$item2}}‘>{{$key2}}</a></li>
      {{/foreach}}
    {{/foreach}}
  </ul>
</div>

传入 View 层的其实就是个叫做 $pageArray 的 JSON 数据。而 MVC 模式也是非常容易理解,然后再看看下面这张图。

技术分享图片

以前的 WEB 项目大多会采用这种后台 MVC 模式,这样做有利于 SEO,并且与前端请求接口的方式相比,少了个 HTTP 请求,理论上加载速度可能会稍微快些。但是缺点也非常明显,前端写完静态页面,要让后台去「套模板」,每次前端稍有改动,后台对应的模板页面同时也需要改动,非常麻烦。页面中如果有复杂的 JS,前端写还是后端写?前端写的话,没有大量的数据,调试不方便,后端写的话... 所以楼主看到的 PHPer 通常都会 JS。

 

前端模板

AJAX 的出现使得前后端分离成为可能。后端专注于业务逻辑,给前端提供接口,而前端通过 AJAX 的方式向后端请求数据,然后动态渲染页面。

我们假设接口数据如下:

[{name: "apple"}, {name: "orange"}, {name: "peach"}]

假设渲染后的页面如下:

<div>
  <ul class="list">
    <li>apple</li>
    <li>orange</li>
    <li class="last-item">peach</li>
  </ul>
</div>


前端模板引擎出现之前,我们一般会这么做:

<div></div>
<script>
// 假设接口数据
var data = [{name: "apple"}, {name: "orange"}, {name: "peach"}];

var str = "";
str += ‘<ul class="list">‘;

for (var i = 0, len = data.length; i < len; i++) {
  if (i !== len - 1)
    str += "<li>" + data[i].name + "</li>";
  else
    str += ‘<li class="last-item">‘  + data[i].name + "</li>";
}

str += "</ul>";
document.querySelector("div").innerHTML = str;
</script>

其实楼主个人也经常这么干,看上去简单方便,但是这样做显然有缺点,将 HTML 代码(View 层)和 JS 代码(Controller 层)混杂在了一起,UI 与逻辑代码混杂在一起,阅读起来会非常吃力。一旦业务复杂起来,或者多人维护的情况下,几乎会失控。而且如果需要拼接的 HTML 代码里有很多引号的话(比如有大量的 href 属性,src 属性),那么就非常容易出错了(这样干过的应该深有体会)。

这个时候,前端模板引擎出现了,Underscore 的 _.template 可能是最简单的前端模板引擎了(可能还上升不到引擎的高度,或者说就是个前端模板函数)。我们先不谈 _.template 的实现,将以上的代码用其改写。

<div></div>
<script src="//cdn.bootcss.com/underscore.js/1.8.3/underscore.js"></script>
<script type="text/template" id="tpl">
  <ul class="list">
    <%_.each(obj, function(e, i, a){%>
      <% if (i === a.length - 1) %>
        <li class="last-item"><%=e.name%></li>
      <% else %>
        <li><%=e.name%></li>
    <%})%>
  </ul>
</script>

<script>
// 模拟数据
var data = [{name: "apple"}, {name: "orange"}, {name: "peach"}];

var compiled = _.template(document.getElementById("tpl").innerHTML);
var str = compiled(data);
document.querySelector("div").innerHTML = str;
</script>

 

这样一来,如果前端需要改 HTML 代码,只需要改模板即可。这样做的优点很明显,前端 UI 和逻辑代码不再混杂,阅读体验良好,改动起来也方便了许多。

前后端分离最大的缺点可能就是 SEO 无力了,毕竟爬虫只会抓取 HTML 代码,不会去渲染 JS。(PS:现在的 Google 爬虫已经可以抓取 AJAX 了 Making AJAX applications crawlable ,具体效果未知)

Node 中间层

单纯的后端模板引擎(后端 MVC)以及前端模板引擎方式都有一定的局限性,Node 的出现让我们有了第三种选择,让 Node 作为中间层。

具体如何操作?简单地说就是让一门后台语言(比如 Java?PHP?)单纯提供渲染页面所需要的接口,Node 中间层用模板引擎来渲染页面,使得页面直出。这样一来,后台提供的接口,不仅 Web 端可以使用,APP,浏览器也可以调用,同时页面 Node 直出也不会影响 SEO,并且前后端也分离,不失为一种比较完美的方案。

技术分享图片

 






node与vue结合的前后端分离跨域问题

第一点:node作为服务端提供数据接口,vue使用axios访问接口,安装axiosnpminstallaxios--save安装完成后在main.js中增加一下配置:importaxiosfrom‘axios‘;axios.defaults.withCredentials=trueVue.prototype.$axios=axios; main.js全部配置如下:importVuefr 查看详情

关于web实现前后端分离,前后端解耦

 一、前言”前后端分离“已经成为互联网项目开发的业界标杆,通过Tomcat+Ngnix(也可以中间有个Node.js),有效地进行解耦。并且前后端分离会为以后的大型分布式架构、弹性计算架构、微服务架构、多端化服务(多种客... 查看详情

5_前后端分离

前后端分离属于软件架构的一种。其核心思想是把前端项目(Node.js实现的)和后端项目独立部署到不同的服务器上,前端项目在通过Ajax请求服务器端项目Restful接口实现数据交互。使用前后端分离架构的项目在项目组中往往配备... 查看详情

5_前后端分离

前后端分离属于软件架构的一种。其核心思想是把前端项目(Node.js实现的)和后端项目独立部署到不同的服务器上,前端项目在通过Ajax请求服务器端项目Restful接口实现数据交互。使用前后端分离架构的项目在项目组中往往配备... 查看详情

node后端数据渲染

...的架构,更多的情况下需要结合Node的能力帮助我们解决前后端分离开发模式下无法解决的问题。本文带我们学习通常前后端分离的开发模式下有哪些问题,利用Node端的服务又是如何帮助我们解决这些问题的。本文选自《现代前... 查看详情

基于原生js+node.js+mysql打造的简易前后端分离用户登录系统

一、登录页面这个没什么说的,就放两张图二、服务器端用express(文档)搭建服务器,数据裤用mysql(基础语句),新建一个users,再新建一张users表,我们用这张表。服务器主要是编写一个简单的接口用来处理页面发过来的请求... 查看详情

前后端分离原理

前言  前后端分离已成为互联网项目开发的业界标准使用方式,通过Nginx+Tomcat的方式(也可以中间加一个Node.js)有效的进行解耦,并且前后端分离会为以后的大型分布式架构、弹性计算架构、微服务架构、多端化服务(多种... 查看详情

前后端分离————vue+node(express)(代码片段)

前后端分离————VUE+node(express)vue作为前端的框架,node(express)作为后端的框架。无数据库,使用端口保存数据。VUE:使用vue-cli构建vue项目(vueapp)。npminstall-gvue-cli(安装,安装过的就不用了)vueinitwebpackvueappaxios:(与ajax相... 查看详情

前端谷歌浏览器基本介绍及前后端分离原理分析

目录前后分离-数据交互为什么要前后分离数据接口规范流程HTTP协议理解:工作原理HTTP请求方法GETHEADPOSTPUTDLELTETRACEOPTIONS(域请求,域检测)CONNECTget与post请求的区别:常见状态码:浏览器调试工具箭头按... 查看详情

第一步:类似前后端分离的基础框架思路

...级互联网私有云应用,就没有考虑Vue.js+node.js来实现真的前后端分离,关键是考虑后期的二次开发及实施维护成本。但对于公有云部分则使用Vue.js+node.js来进行开发与部署。前端:jquery+bootstrap+bootstrap- 查看详情

前后端分离是什么?

今天,来普及一个概念,就是前后端分离是什么。在未出现前后端分离之前,公司里的后端开发基本上上就是全栈开发,前端开发的重要性不是很明显,此时的前端就是提供一个静态的、初始的HTML文档给后端就可以了。随着科... 查看详情

vue发布中的前后端分离和前后端不分离

前后端分离思路:前端和后台完全分离.前端提供静态的css和js,在运行时将css和js给后端,后端进行数据的请求(ajax)前后端分离就是前端和后台在不同的服务器上。基本是前端一个nginx加css和js后端nginx加index.html当用户访问的时候... 查看详情

identityserver4-前后端分离的授权验证(代码片段)

原文:IdentityServer4-前后端分离的授权验证(六)上两节介绍完Hybrid模式在MVC下的使用,包括验证从数据获取的User和Claim对MVC的身份授权。本节将介绍Implicit模式在JavaScript应用程序中的使用,使用Node.js+Express构建JavaScript客户端,实... 查看详情

前后端分离的思考与实践(代码片段)

...筱谷   Nginx+Node.js+Java的软件栈部署实践起关于前后端分享的思考,我们已经有五篇文章阐述思路与设计。本文介绍淘宝网收藏夹将Node.js引入传统技术栈的具体实践。淘宝网线上应用的传统软件栈结构为Nginx+Velocity+Java... 查看详情

ruoyi前后端分离版学习001--初见

基本介绍ruoyi是基于springboot+vue的前后端都有的项目,现在社区已经扩展到基本什么都有实现版本。项目总体架构是:ruoyi-admin:后台管理系统的一些controllerruoyi-common:通用代码,一些工具类ruoyi-framework:框架代码ruoyi- 查看详情

ruoyi-vue(若依前后端分离版本)环境搭建用eclipse安装redis后端配置配置node环境前端配置

本地部署ruoyi-vue前后端分离版后端配置下载源码并数据库建表安装redis后端配置完成,运行RuoYi-Vue-master\\ruoyi-admin\\src\\main\\java\\com\\ruoyi下的RuoYiApplication.java文件启动前端配置配置node环境在E:\\eclipse\\spaceone\\RuoYi-Vue-master文件路... 查看详情

前后端分离与前后端不分离

前后端不分离  在前后端不分离的应用模式中,前端页面看到的效果都是由后端控制的,由后端渲染页面或重定向,也就是后端需要控制前端的展示,前端与后端的耦合度很高。  这种应用模式比较适合纯网页应用,但是当... 查看详情

前后端分离及react的一些研究

...对英才网企业线前端不断的完善过程中,我们尝试进行了前后端分离,引入Node环境、以及在使用React的过程中,自行开发DOM渲染框架,解决React兼容低版本IE的问题,在这个过程中,我们有了一些经验和体会,希望本文对您有所... 查看详情