美文网首页
koa全攻略

koa全攻略

作者: 有一种感动叫做丶只有你懂 | 来源:发表于2020-11-06 16:26 被阅读0次

1.什么是洋葱模型

简单介绍

用一句话来说,koa,express框架的中间件的执行顺序,可以比喻成洋葱模型。

我们先看一张图
洋葱模型.png
接下来我们用代码演示一下,猜一下执行结果是什么?
const Koa = require ('koa');
const app = new Koa ();

app.use ((ctx, next) => {
  console.log (1);
  next ();
  console.log (2);
});
app.use ((ctx, next) => {
  console.log (3);
  next ();
  console.log (4);
});
app.listen (4000, () => {
  console.log ('服务器启动成功,端口为4000');
});

执行完之后,我们可以看到输出结果为:1,3,4,2,ok,我们看到输入结果是符合洋葱模型的,看到这可能还有些同学不明白,不着急我们慢慢看。

2.async/await在中间件里面的使用

async/await在koa中的使用,以及背景

async/await 是koaexpress这俩大web框架最大的区别,可以说koa的衍变就是为了解决express对于异步编程不友好的问题。

我们看一个示例

错误代码

const Koa = require ('koa');
const app = new Koa ();
var count = 0;
app.use ((ctx, next) => {
  console.log ('第一步');
  next ();
  console.log (`第三步执行完毕,count:${count}`);
});
app.use (async (ctx, next) => {
  console.log ('第二步');
  var a = await asyncFunc ();
  count = a;
});
function asyncFunc () {
  return new Promise ((resolve, reject) => {
    setTimeout (() => {
      resolve (10);
    }, 3000);
  });
}
app.listen (5000, () => {});

我们需要异步函数asyncFunc(这个函数也就相当于一个网络请求)的返回值来赋值给count,按照koa中间件的执行顺序,也就是洋葱模型,我们期望的最后输出count的值是10

但是

我们执行之后,输出count的值为0

出现这样的原因是什么?

image.png

正确的代码

const Koa = require ('koa');
const app = new Koa ();
var count = 0;
app.use (async (ctx, next) => {
  console.log ('第一步');
  await next ();

  console.log (`第三步执行完毕,count:${count}`);
});
app.use (async (ctx, next) => {
  console.log ('第二步');
  var a = await asyncFunc ();
  count = a;
});

function asyncFunc () {
  return new Promise ((resolve, reject) => {
    setTimeout (() => {
      resolve (10);
    }, 3000);
  });
}
app.listen (5000, () => {});

输出count的值为10

相关文章

  • koa全攻略

    1.什么是洋葱模型 简单介绍 用一句话来说,koa,express框架的中间件的执行顺序,可以比喻成洋葱模型。 我...

  • koa2 用到的中间件

    koa-router //koa路由 koa-bodyparser //post 获取值 koa-stat...

  • koa-router处理URL

    koa-router处理URL koa-router使用的结构const Koa = require('koa')...

  • koa 自学入门

    const Koa = require('koa');const route = require('koa-rou...

  • 初见 Koa 2

    koa 和 koa 2 最大的不同是koa 2 支持 async/await。koa 通过结合 generato...

  • trello01:后端搭建

    开发依赖: koa : 后端的主框架。 koa-router:基于Koa的路由。 koa-static-cache...

  • Koa2教程(常用中间件篇)

    目录一、koa-bodyparser二、koa-router三、koa-views + ejs四、koa-stat...

  • koa2设置跨域

    npm install --save koa2-corsvar Koa = require('koa');var ...

  • koa

    koa 学习 中间件 koa-router koa-router 获取get/post请求参数 koa-bodyp...

  • koa2 入门教程

    koa koa 中文koa-generator 简介 koa 是一个新的 web 框架, 由 express 原班...

网友评论

      本文标题:koa全攻略

      本文链接:https://www.haomeiwen.com/subject/hjkgvktx.html