前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Koa2与Express对比

Koa2与Express对比

原创
作者头像
愤怒的小鸟
修改2020-12-17 18:06:27
1.4K0
修改2020-12-17 18:06:27
举报
文章被收录于专栏:web shareweb share

1. 区别

  1. 体积:Koa2不涉及路由以及其他中间件的捆绑,体积比Express小;
  2. 写法:Koa2使用 async函数 ,Express使用 Promise回调 ,因此Koa2可以避免回调,而且可以使用try catch更方便地去处理错误异常;
  3. 中间件机制:
  • Koa2使用 洋葱圈模式 ,其核心实现思想是使用函数调用栈,先调用的后执行,直到里层函数一层一层由里向外执行完
  • Express核心思想是使用任务队列,先进队列的先取出执行,后面的任务进队等待,直到前面的任务都执行完后再执行

2. 实现一个获取列表的接口实例:

使用Express:

代码语言:javascript
复制
router.post('/update', function (req, res, next) {
  const id = req.query.id;
  const data = req.body;
  const result = updateArticle(id, data);
  return result.then(val => {
      if (val) {
        res.json(new SuccessModel());
      } else {
        res.json(ErrorModel("更新文章失败"));
      }
    }).catch(e => {
      console.error(e);
    }).then(() => { /** 其他动作 */ })
    .then(() => {
      //...
    })
});

使用Koa2:

代码语言:javascript
复制
router.post('/update', loginCheck, async function (ctx, next) {
  const id = ctx.query.id;
  const data = ctx.request.body;
  try {
    const result = await updateArticle(id, data);
    if (result) {
      ctx.body = new SuccessModel();
       /** 其他动作 */ 
    } else {
      ctx.body = new ErrorModel("更新文章失败");
    }
  } catch (e) {
    console.error(e);
  }
})

可以看出:

  • 对于结果获取:Express通过Promiseresolve的回调,获取resolve得到的结果;而Koa2通过await一个async函数,使用同步的写法实现异步的效果,写法更清晰。
  • 对于错误捕捉:Express对于每个callback都要做错误捕捉,然后一层一层向外传递;而Koa2可以使用一个try catch就可以实现所有错误的捕捉。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
作者已关闭评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 区别
  • 2. 实现一个获取列表的接口实例:
相关产品与服务
消息队列 TDMQ
消息队列 TDMQ (Tencent Distributed Message Queue)是腾讯基于 Apache Pulsar 自研的一个云原生消息中间件系列,其中包含兼容Pulsar、RabbitMQ、RocketMQ 等协议的消息队列子产品,得益于其底层计算与存储分离的架构,TDMQ 具备良好的弹性伸缩以及故障恢复能力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档