Koa与Express的区别

Koa与Express的区别

      • Express
      • Koa
      • 两者区别
          • Handler的处理
          • 路由
          • 启动方式
          • 回调
          • Http Request
          • Context
          • 生命周期
          • 异步流程
          • 错误处理
          • 中间件

一个Java转前端的自白,以前就是会用没有深究,今天才大概分清Koa与Express的区别,哈哈哈哈。

Koa和Express都是NodeJS的主流应用开发框架。

Express

是一个完整的nodejs应用框架。
Koa是由Express团队开发的,但是它有不同的关注点。
Koa致力于核心中间件功能。
nodejs中间件是访问请求对象(req)和响应对象(res)的例程。
这些例程在路由处理程序之前被调用,
因此它们位于客户端与生成响应的路由逻辑的“中间”。
nodejs应用程序可以将中间件例程“链接”到自定义请求/响应管道中。
管道可以根据请求和响应进行操作,包括头和主体。
Express和Koa都包含中间件,但实现方法却截然不同。

  1. Node的基础框架,基础Connect中间件,自身封装了路由、视图处理等功能;
  2. 线性逻辑,路由和中间件完美融合,清晰明了;
  3. 弊端是callback回调方式,不可组合、异常不可捕获;
  4. ES5语法;
  5. connect的执行流程: connect的中间件模型是线性的,即一个一个往下执行;

Koa

核心Koa模块只是中间件内核。
而Express包含一个完整的应用程序框架,具有路由和模板等功能。
Koa确实有这些功能的选项,但它们是单独的模块。
因此,Koa的模块化程度更高;您只需包含所需的模块即可。
核心KOA模块只有大约2千行代码,
因此,如果您只需要核心请求应答上下文对象,则Koa占用空间非常小。
相比较而言,Express较为庞大,内置了一整套中间件功能,好处是对于大部分应用场合你可以省掉自己选择和组合模块的时间。

  1. 基于node的一个web开发框架,利用co作为底层运行框架,利用Generator的特性,实现“无回调”的异步处理;
  2. ES7语法;
  3. 更小、更富有表现力、更健壮的基石;
  4. 利用async函数、Koa丢弃回调函数,增强错误处理;
  5. 很小的体积,因为没有捆绑任何中间件;
  6. 类似堆栈的方式组织和执行;
  7. 低级中间件层中提供高级“语法糖”,提高了互操性、稳健性;

两者区别

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触发下一个中间件;

你可能感兴趣的:(vue.js,node.js)