精华内容
下载资源
问答
  • node中间层

    2018-05-03 15:27:46
    Node中间层的作用 随着项目的渐增,调用后台的接口的频率渐增,而页面的不一致需要不一样的数据结构 后台如果根据页面去设计接口的话是很不灵活,所以这时候就出现了node层的出现   适配pc和移动端的数据...

    日结博客 5.3 HZ

    Node中间层的作用

    随着项目的渐增,调用后台的接口的频率渐增,而页面的不一致需要不一样的数据结构

    后台如果根据页面去设计接口的话是很不灵活,所以这时候就出现了node层的出现

     

    • 适配pc和移动端的数据结构

    • 减少后台请求的次数

     

    node端用来做请求的处理,路径/数据结构等等

    可以并发请求

    • 后台可以采用HSF的形式

    • node端走http请求接口

    • 接收不同客户端(Android、Browser、iOS etc)的请求,分发给不同程序应用

    • 合并多个后台程序的数据为一个返回给前台

     

    展开全文
  • Node中间层—淘宝 PHP中间层—Facebook 开发模式的演变 MVC模式 弊端:前后端不分离,后端压力过大 MVVM模式 优点:前后端分离 弊端: 1、浏览器(客户端)压力过大,浏览器CPU占用过大 2、不利于SEO,页面都是由...

    Node中间层—淘宝
    PHP中间层—Facebook

    开发模式的演变

    MVC模式
    在这里插入图片描述
    弊端:前后端不分离,后端压力过大
    MVVM模式
    在这里插入图片描述
    优点:前后端分离
    弊端:
    1、浏览器(客户端)压力过大,浏览器CPU占用过大
    2、不利于SEO,页面都是由JS生成,SEO检测的是HTML
    3、直接暴露接口,存在安全风险
    Node中间层模式
    在这里插入图片描述
    优点:既满足了前后端分离,也减轻了客户端压力,还有利于SEO

    技术选型

    Node框架选型
    Express、Koa(简化的express)、egg(企业级node开发框架,适用于全站项目)
    视图模板选型
    ejs、pug(jade)、art-template
    ejs语法

    中间层搭建(express+ejs)

    目录结构
    在这里插入图片描述
    app.js文件

    const express =require("express");
    const app = express();
    //中间件
    const router = require("./src/router/router.js");
    //引入body-parser接收post请求的数据 安装:npm install body-parser --save
    var bodyParser = require('body-parser');
    //中间件使用body-parser
    app.use(bodyParser.urlencoded({ extended: false }))
    app.use(bodyParser.json())
    //静态目录设置
    app.use(express.static("./static"))
    const ejs = require("ejs");
    app.set("view engine","ejs");
    app.set("views", "./src/views");
    app.use("/",router);
    app.listen(3300);
    

    router.js文件

    const express = require("express");
    const router = express.Router();
    const index = require("./controll/index.js");
    router.get("/",index);
    module.exports = router;
    

    index.js文件

    const request = require("request");
    function index(req,res){
        request({
            url:"http://localhost:3000/",
            method:"GET"
        },function(error,response,body){
            if(!error&&response.statusCode==200){
                let data = JSON.parse(body);
                res.render("./index.ejs",data);
            }
        })
    }
    module.exports = index;
    

    server.js文件

    const express = require("express");
    const app = express();
    app.get("/",(req,res)=>{
        res.json({
            status:200,
            attr:[{
                name:"小明",
                age:15
            },{
                name:"小红",
                age:16
            }]
        })
    })
    app.listen(3000);
    

    效果:
    在这里插入图片描述

    中间层拓展

    1、利用pm2(node应用程序管理工具)做集群

    安装
    npm install pm2 -g
    启动(4代表开启4个进程)
    pm2 start app.js -i 4
    

    在这里插入图片描述
    这样,前端就可以根据高的访问,先去做一个分流处理,然后后端再做一次缓压处理,则能够很好的解决高并发。
    2、利用nginx做负载均衡
    3、静态html、redis减少请求,减轻服务器压力
    redis教程

    展开全文
  • 由于最近项目上的原因,公司采用了node中间层,通过它来担当前端和真正意义上的后端之间的中转纽带。原因是我参与的这个项目是一个大型的云计算控制台,里面所涉及到的接口可谓是“鱼龙混杂”,有自己部门开发的接口...

    由于最近项目上的原因,公司采用了node中间层,通过它来担当前端和真正意义上的后端之间的中转纽带。原因是我参与的这个项目是一个大型的云计算控制台,里面所涉及到的接口可谓是“鱼龙混杂”,有自己部门开发的接口,也有其他部门开发的接口,所以接口按照功能模块分为很多系列,不同的接口host也千差万别,如果不请node这个“大咖”介入,真的是乱了套了。
    node这个东西能让js运行在服务端,对于前端来说浏览器的js引擎可以作为js的解释器,对于node来说,解释器是谷歌的v8引擎。你可以用node来写自己的服务器,这个服务器可以是代理服务器,也可以是提供数据的源服务器。目前来说源服务器一般还是采用比较稳定的java、python来搞得居多,node比较适合一些高并发的场景,还有就是在项目中充当中转请求的纽带角色,这也是我们接下来要介绍的重点。
    node做中间层的作用
    node做中间层主要有以下作用:

    1. 接收前端发送来的请求,然后进行请求转发,在node层发送真正的后端请求,由于后端是不存在跨域的,所以某种意义上也能解决跨域的问题;
    2. 根据前端的请求信息进行逻辑判断,针对不同形式的请求做相应的处理,比如可以根据请求信息判断是移动端还是PC端发来的请求,以此来确定作何处理;
    3. 对前端请求的数据进行二次处理,然后在node层发送真正的后端请求,同样,对后端请求返回的数据,我们可以进行二次处理,加工成前端需要的数据形式,处理后再由node将数据返回给前端;
    4. 做服务端渲染,有利于SEO,性能也会得到优化;
    5. 浏览器端同时发起多个http请求时,非常耗时,可以通过node给浏览器暴露一个接口,node和真正的后端的多个接口通信,起到合并接口的作用。

    3和5应用最广泛的,我在项目里所用到的node中间层也是这个用途。
    上点代码简单做一下示例,就用express示范一下,这些常用的框架各位前端同胞应该都比较熟悉 ( 不熟悉的话请自行度娘。。。)
    一个简单router的定义:

    var express = require('express');
    var router = express.Router();
    var axios = require('axios');
    
    var url = 'https://***************/*********';
    router.get('/', function (req, res, next) {
        res.results = {
            code: 200,
            message: 'getUser request'
        }
        //console.log(req)
        axios.post(url, {}).then(function (response) {
            let {data } = response.data;
            console.log(data)
            res.send(data);
            // 把request和response转交给下一个中间件!!!
            next();
        }).catch(function (err) {
            res.send({error: 'error'});
        });
        //res.render('index', { title: 'daihe' });
        
    }, function (req, res, next) {
        console.log(res.results);
        console.log('response success!!');
    });
    
    module.exports = router;
    

    引入路由,起node服务器:

    var createError = require('http-errors');
    var express = require('express');
    var path = require('path');
    var cookieParser = require('cookie-parser');
    var logger = require('morgan');
    
    var indexRouter = require('./routes/index');
    var usersRouter = require('./routes/users');
    var getUserRouter = require('./routes/getUser');
    var bodyParser = require('body-parser');/*post方法*/
    
    var app = express();
    
    app.use(bodyParser.json());// 添加json解析
    app.use(bodyParser.urlencoded({extended: false}));
    
    // view engine setup
    app.set('views', path.join(__dirname, 'views'));
    app.set('view engine', 'jade');
    
    app.use(logger('dev'));
    app.use(express.json());
    app.use(express.urlencoded({ extended: false }));
    app.use(cookieParser());
    app.use(express.static(path.join(__dirname, 'public')));
    
    // 路由中间件,引入上面定义的路由
    app.use('/', indexRouter);
    app.use('/users', usersRouter);
    app.use('/getuser', getUserRouter);
    
    // catch 404 and forward to error handler
    app.use(function(req, res, next) {
      next(createError(404));
    });
    
    // error handler
    app.use(function(err, req, res, next) {
      // set locals, only providing error in development
      res.locals.message = err.message;
      res.locals.error = req.app.get('env') === 'development' ? err : {};
    
      // render the error page
      res.status(err.status || 500);
      res.render('error');
    });
    
    module.exports = app;
    
    

    我们组用的是基于express自研的node框架 (其实只是在express的基础上进行了再次封装,用起来更方便些~) 。
    业务中的使用场景
    最近接触到的业务有这样一个需求:用户设置好商品后点击购买,首先会先创建商品,所有商品都创建成功后,会跳转到下订单的页面,提交订单后会触发创建计算机集群的请求。
    于是问题就来了,订单页面不是我们组做的,是两个完全独立的项目代码,但是点击订单页成功下单后会触发创建计算机集群的请求,由于此时的订单页面是其他部门的老铁写的代码,是独立的工程,肯定不受我们的代码控制,因此直接进行常规请求流程是行不通的。可能你已经看晕了,总之简单来说就是以下几个步骤:

    1. 在前端发送创建商品的请求;
    2. 在node层对前端的请求进行包装,进行请求转发;
    3. 创建商品全部成功后跳转到订单页面,提交订单后后台来调用node层的接口;
    4. 用订单系统的请求参数和前端传来的参数拼出新的数据结构,用该参数执行最终的创建请求;
      因为有接口参数需要node层对两次不同请求的参数进行重组,但是在第二个请求发生时,第一个请求的信息已经获取不到了,因此用了redis对第一个请求中有用的信息进行了缓存,在第二个请求发生时就能成功拿到第一个请求的有用信息了。

    总结
    node.js在最新的前端里扮演着相当重要的角色,也解决了不少曾经很让前端工程师棘手的问题,其实现在的前端和曾经的html+css+js三板斧已经完全不是一种东西了,现在广义上的前端实际上做了很多以前后端来做的工作,比如ajax请求、路由控制,还有我们正在说的node服务,本身就是介于前后端之间的一个中转服务器,node中间层能做无视跨域、接口合并、二次处理前端数据、服务端渲染等工作,把耗性能的操作从前端剥离,对前端是一种很大的优化。

    展开全文
  • 为什么选择node中间层 文章节选自【探索】NodeJS中间层搭建 现用的开发模式适用场景 以后端的为主的MVC模式 在实现一些同步展现的业务效率很高 但是遇到异步同步结合的页面 在与后端沟通就会显得相对麻烦一些 ajax...

    为什么选择node中间层

    文章节选自【探索】NodeJS中间层搭建

    现用的开发模式适用场景

    • 以后端的为主的MVC模式 在实现一些同步展现的业务效率很高 但是遇到异步同步结合的页面 在与后端沟通就会显得相对麻烦一些
    • ajax为主的spa型开发模式 比较适合开发app类型的场景 但是只是适合做app 因为seo问题不好解决 对于很多类型的系统 这种开发方式也过重

    前后端分离

    从职责上划分 node实现了前后端分离的中间层
    在这里插入图片描述

    • 前端负责 view 和 controller 层

    • 后端负责 model 业务处理/数据等
      在这里插入图片描述

    前端掌握了Controller,就可以做路由设计、网站目录结构、网站前端架构。
    掌握了View,就可以通过后端模板引擎(jade/pug,Ejs,swig等),边写边绑数据。更别提,pug之流 还有mixin,让我们对 html进行函数化,大大提高效率。

    NodeJS让前端无需学习一门新的语言,就能做到这些事情。

    基于NodeJS“全栈”式开发

    下面的这张图很简单形象的说明了Node中间层
    在这里插入图片描述

    中间层的性能问题

    多加了一层通讯,肯定会有一定的性能损耗。但分层带来的损失,一定能在其他方面的收益弥补回来,而且合理的分层能让职责清晰、方便协作,大大提升开发效率。也可以通过优化通讯方式和协议,尽可能把损耗降到最低。

    Node什么都能做,为什么还要JAVA/PHP?

    我们的初衷是做前后端分离,如果考虑这个问题就有点违背我们的初衷了。即使用Node替代Java/PHP,我们也没办法保证不出现今天遇到的种种问题,比如职责不清。我们的目的是分层开发,专业的人,专注做专业的事。基于JAVA/PHP的基础架构已经非常强大而且稳定,而且更适合做现在架构的事情。

    前端的任务更重要了

    常见的前后端分离的开发模式中,后端为前端提供了路由结构和页面的数据绑定,前端只需要切页面和少量的逻辑。

    在node中间层中,前端不仅仅要切页面和做页面逻辑,还要做url design、页面数据绑定、联调与沟通,还要考虑SEO的问题,伪静态页面、title/keyword设置、网站地图,甚至包括错误日志等等。

    虽然前端的工作量增加了不少,但是基于模块化的开发,让总体的效率提升了。
    对于后端程序员,接口整合的工作交给了前端服务器进行处理,同时和前端耦合度大大降低,工作量和工作效率都减少了。

    另外,由于前后端分离,测试都可以分开来了,专门测试接口的和专门测试ui层。

    总结


    我觉得,以后基于NodeJs的全栈式开发的模式将会越来越流行,这也会引领前端步入工程化时代。但是要把Node全栈开发变成一个稳定的、方便的开发工具,还有很多路要走。这次公司的交易平台项目就是一个很好的实践,接下来,请继续关注我对这个项目的总结,希望能给各位带来灵感。

    展开全文
  • vue项目node中间层脚手架

    千次阅读 2018-10-27 22:01:59
    直接去git拉取脚手架即可,支持pm2启动。目前仅支持转发一个域名,后续会不断完善,喜欢的给个star啦~ 有疑问的可以在评论区留言~ 脚手架地址:https://github.com/BadMooncc/vue-server-middle...
  • 服务器端渲染(SSR)与 node 中间层 1. 什么时候需要“服务器端渲染或 node 中间层” 在前后端分离之后,后端语言的模板功能被弱化,整个页面的渲染基本上都由前端 js 动态渲染,但这样对于一些应用来说是有缺陷...
  • 使用Node作为Web中间层的优势: 1、功能分离,减轻板块负担 2、跨系统、跨终端均可重用页面数据校验、逻辑代码,无需因为新系统、终端的接入而重写校验; 3、只在中间件中做一次数据校验,避免了前端做数据校验的...
  • 转载: https://blog.csdn.net/weixin_42674359/article/details/82887032
  • 前端与后端渲染方式的发展大致经历了这样几个阶段:后端模板渲染、客户端渲染、node 中间层、服务器端渲染(ssr)。 1. 后端模板渲染 前端与后端最初的渲染方式是后端模板渲染,就是由后端使用模板引擎渲染好 html ...
  • node中间层数据流向 http --> node.router --> node.controller --> node.service --> java接口
  • node中间层

    千次阅读 2019-01-31 18:14:34
    一、为什么用node中间层? 后端出于性能和别的原因,提供的接口所返回的数据也许不适合前端直接使用。前端所需的排序功能、筛选功能,以及到了视图层的页面展现,也许都需要对接口的所提供的数据进行二次处理。...
  • vue+node实现中间层同步调用接口

    千次阅读 2019-07-31 21:52:57
    为了应对业务的复杂性,提高前端的渲染能力,故在项目中引入nodejs做中间层,前端承接vue,后端...1.前端的vue工程采用axios请求中间层node服务会遇到跨域问题 解决方法:打开vue工程的index.js配置文件添加如下配...
  • 中间层node

    2018-09-20 19:03:13
    在很多大公司的架构里,node都是作为中间层,主要负责下面几种任务: 1.中转一些请求,串接服务;同时也过滤一些基本的io请求 2.前端项目路由的相关业务处理 3.渲染前端模板(vue\react首屏) 3负责架构中部分专门...
  • node作为中间层进行前后端分离

    千次阅读 2017-10-15 21:11:49
    Node中间层做前后端分离 1. 前后端分离的定义 就是前端代码,和后端后端分开嘛。 2. 啊,怎么分开,那我直接cx把前端代码弄走吗? 咦,请求不了了, XMLHttpRequest cannot load ...
  • 使用node中间层转发请求

    千次阅读 2018-11-12 22:59:00
    const request = require('request')// 使用前npm i request express const express = require('express') const app = express() var options = { url: 'url', method: 'POST', headers: { ...
  • node作为中间层的一些看法

    千次阅读 2017-11-24 11:13:29
    我之前多个项目的场景,前端渲染交给node来做,前端团队自己负责整个前端的发布构建,整个工作流使用gulp或者webpack搭建起来。业务团队是典型的java后端,他们有自己成熟的架构,node服务器通过thrift来做rpc调用。...
  • 随着大前端时代的来临,node在前段开发的过程中占据了越来越重要的地位,近期接受了一个项目,恰好是node中间层模式开发的,趁此机会我也对node中间层有了更深层次的理解,这里记录一下在这个项目中node.js做...
  • 为什么用node中间层 后端出于性能和别的原因,提供的接口所返回的数据也许不适合前端直接使用。前端所需的排序功能、筛选功能,以及到了视图层的页面展现,也许都需要对接口的所提供的数据进行二次处理。这些...
  • Node中间层专为PC Web提供定制化接口整合服务,各个后端业务方只需要提供原始抽象数据接口,由中间层去整合,这样前端只需要请求一次中间层接口就获取到适合展现的数据,无需浏览器端进行多次处理,具体功能如下图:...
  • 前端所需的 排序功能、 筛选功能 ,以及到了视图的 页面展现 ,也许都需要 对接口 所提供的 数据进行二次处理 。这些处理虽可以放在前端来进行,但也许数据量一大便会浪费浏览器性能。因而现今,增加node端便是一...
  • (一)什么是中间层 中间层(Middle Tier)也称作 应用程序服务器层 或应用服务层,是用户接口或 Web 客户端 与 数据库 之间的逻辑层。 (二)图解 中间层简单说就是在 客户端 和 服务端 之间架起来的一层。 ...
  • 简述node中间层的优势 node中间层,可以解决前端的跨域问题,因为服务器端的请求是不涉及跨域的,跨域是浏览器的同源策略导致的,关于跨域可以查看跨域复习使用node坐中间层,方便前后端分离,后端只需要提供数据...
  • Node.js作为中间层的前后端分离

    千次阅读 2017-06-17 16:17:00
    Node.js作为中间层的前后端分离 现今,许多公司的老项目都存在这样一些问题: * 前端代码越来越复杂 * 前后端依旧高度耦合 * 无法良好的支持跨终端 解决方案: * 前端代码越来越复杂,我们希望尽可能地减少工作量,...
  • node.js做中间层调用java接口

    千次阅读 2019-09-19 17:37:15
    今天就遇到了这个问题 vue 调用java接口 前后端分离 造成跨域请求 后端迟迟不解决 我便直接用nodejs反向代理java ...这样子的话 你前端只需要调用你的node接口 你的node接口调用后端java接口 
  • 因为中间层服务3001端口和这里的服务的端口4000不一样,也不用解决跨域,因为服务器之前不存在跨域 app.get('/api/search',function(req,res){ res.json({ errno:0, data:{ test:333 } }) }) let server = ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 56,484
精华内容 22,593
关键字:

node中间层