zoukankan      html  css  js  c++  java
  • 前端面试—Koa与Express的区别

    前端面试—Koa与Express的区别

    博客说明

    文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢!

    介绍

    Koa
    • 基于node的一个web开发框架,利用co作为底层运行框架,利用Generator的特性,实现“无回调”的异步处理;
    • ES7;
    • 更小、更富有表现力、更健壮的基石;
    • 利用async函数、Koa丢弃回调函数,增强错误处理;
    • 很小的体积,因为没有捆绑任何中间件;
    • 类似堆栈的方式组织和执行;
    • 低级中间件层中提供高级“语法糖”,提高了互操性、稳健性;
    Express
    • Node的基础框架,基础Connect中间件,自身封装了路由、视图处理等功能;
    • 线性逻辑,路由和中间件完美融合,清晰明了;
    • 弊端是callback回调方式,不可组合、异常不可捕获;
    • ES5;
    • connect的执行流程: connect的中间件模型是线性的,即一个一个往下执行;

    区别

    • Handler的处理

      Express普通回调函数,在同一线程上完成当前进程的所有Http请求;
      Koa利用Generator Function作为响应器,co作为底层运行框架,利用Generator特性,实现“协程响应”;
      
    • 路由

      Express的路由是自身集成的; 
      Koa的需要引入中间件Koa-router;
      
    • 启动方式

      koa采用new Koa()
      express采用传统的函数形式function; 
      
    • 回调

      Koa没有回调
      express有回调; 
      
    • Http Request

      koa1使用this取代Express的req、res;
      
    • Context

      Koa新增了一个Context对象,用来代替Express的Request和Response,作为请求的上下文对象。 
      还有Node原生提供的req、res、socket等对象; 
      
    • 生命周期

      Express的生命周期不确定:express内部执行异步函数,不能确定什么时候执行完; 
      Koa确定:koa是基于await/async,在执行下一步操作的时候,必须等待前端await执行完; 
      
    • 异步流程

       Express采用callback来处理异步(ES5);
       Koa1采用generator(ES6);
       Koa2采用async/await(ES7);
      
    • 错误处理

       Express使用callback捕获异常,深层次的异常捕获不了;
       Koa使用try catch,很好的解决异常捕获;
      
    • 中间件

       koa2的中间件:
       		1、通过async await实现的,中间件执行的顺序是“洋葱圈”模型。
       		2、中间件之间通过next函数联系,当一个中间件调用next()后,会将控制权交给下一个中间件,直到下一个中间件不再执行next()后,会沿路返回,将控制权交给前一个中间件。
       Express中间件:
      		1、一个接一个顺序执行,response响应写在最后一个中间件中。
      		2、特点:
      			a.app.use用来注册中间件;
      			b.遇到http请求,根据path和method判断触发哪些中间件;
      			c.实现next机制,即上一个中间件会通过next触发下一个中间件;
      

    感谢

    以及勤劳的自己,个人博客GitHub

    微信公众号

  • 相关阅读:
    JavaScript cookie详解
    Javascript数组的排序:sort()方法和reverse()方法
    javascript中write( ) 和 writeln( )的区别
    div做表格
    JS 盒模型 scrollLeft, scrollWidth, clientWidth, offsetWidth 详解
    Job for phpfpm.service failed because the control process exited with error code. See "systemctl status phpfpm.service" and "journalctl xe" for details.
    orm查询存在价格为空问题
    利用救援模式破解系统密码
    SSH服务拒绝了密码
    C# 调用 C++ DLL 中的委托,引发“对XXX::Invoke类型的已垃圾回收委托进行了回调”错误的解决办法
  • 原文地址:https://www.cnblogs.com/guizimo/p/13711162.html
Copyright © 2011-2022 走看看