[Koa系列-1]简单入门

简介:

1、前言

很久之前就想学习koa,每次学习一般就被其他事情打断;

需要koa的过程,个人认为是这样的:

  1. 学习generator
  2. 学习promise
  3. 学习co的实现,以及koa的原理
  4. 开始学习koa搭建基本结构
  5. 整合其余服务器端组件

本系列就从第 4 步骤开始;

1.1、基本的示例

Step 1:创建index.js文件

创建一个新的空白文件夹,同时将下述代码存成index.js

var koa = require('koa');

var app = koa();

var str = '';

// 第一个中间件
// 你重新刷新页面会依次从第一个中间开始运行
app.use(function *(next){  
  str = ''; // 去掉或者增加这一行,看看结果有什么差别

  str += 'A';
  yield next;
  str += 'B';

  console.log('1:',str);

});

// 第二个中间件
app.use(function *(next){

  str += 'C';
  yield next;
  str += 'D';
  console.log('2:',str);

});

// 第三个中间件
app.use(function *(next){

  str += 'E';
  this.body = str;
  str += 'F';
  console.log('3:',str);

});

app.listen(3000);  

Step 2:运行示例

在当前目录下执行:

npm init  
npm install --save koa  
node --harmony index.js  

node版本要在0.11以上

在浏览器里输入localhost:3000

1.2、理解例子的执行顺序

上述程序运行之后,在浏览器localhost:3000之后,猜一下终端里输出的执行顺序。 既不是 A-B-C-D-E-F,也不是 A-C-E-B-D-F,而是 A-C-E-F-D-B

终端里打印的字符是:

3: ACEF  
2: ACEFD  
1: ACEFDB  

浏览器里面永远显示的是:

ACE  

你可能会发现终端里会输出两次字符串,这是因为浏览器可能去请求图标favicon了。

Tips:koa.use(function)是向应用程序中注入中间件

KICK OFF KOA - 1 : Hello KOA

后续的教程将伴随着 KICK OFF KOA 的教程展开,由点到面的学习koa框架;

Step 1:获得提示

在命令行中输入kick-off-koa ,并选择第一个 HELLO_KOA

kick-off-koa  

按下回车就能出现提示;

Step 2:编写代码

将下列代码保存成 koa1.js 文件:

    var koa = require('koa');
    var app = koa();
    var port = process.argv[2];
    app.use(function *(){
        this.body = 'Hello';
      });
    app.listen(port);
  • port = process.argv[2] :用于获取用户输入的参数
  • app.use(generator):插入中间件,使用 [generator][3] 函数;
  • this.body:这里的 this 是中间件的上下文对象,囊括了 request  response 这两对象到一个中,并提供了很多有用的方法方便编写web应用

Step 3:验证结果

运行:

kick-off-koa verify koa1.js 3005  

如果不出意外,将展示成功:

Your submission results compared to the expected:

────────────────────────────────────────────────────────────────────────────────

1.  ACTUAL:    "hello koa"  
1.  EXPECTED:  "hello koa"

2.  ACTUAL:    ""  
2.  EXPECTED:  ""


────────────────────────────────────────────────────────────────────────────────

 Submission results match expected

为了对照还会给出官方的答案。

3、参考文献

目录
相关文章
|
JavaScript
Ant designe vue中有关默认组件引入不生效的问题;
Ant designe vue中有关默认组件引入不生效的问题;
268 0
|
人工智能 自然语言处理 搜索推荐
AI技术在智能客服系统中的应用与挑战
【9月更文挑战第32天】本文将探讨AI技术在智能客服系统中的应用及其面临的挑战。我们将分析AI技术如何改变传统客服模式,提高服务质量和效率,并讨论在实际应用中可能遇到的问题和解决方案。
859 65
|
C++
CMake教程8:在Vscode中使用CMake
CMake教程8:在Vscode中使用CMake
1047 0
|
关系型数据库 MySQL Linux
docekr环境搭建配置!!!
本文介绍了Docker的安装部署及基本操作,包括使用国内源安装Docker CE、配置Linux内核流量转发、启动第一个容器、初体验Docker玩法、镜像命令、镜像详解、镜像分层结构、镜像实践操作、容器管理实践等内容。通过具体示例,如下载并运行MySQL、Redis、Nginx和WordPress镜像,帮助读者快速掌握Docker的基本使用方法。
360 5
|
搜索推荐 定位技术
ads 明细表模型
【8月更文挑战第13天】
253 1
|
消息中间件 监控 数据库
Camunda BPM Run下载(7.20)
Camunda BPM Run下载(7.20)
505 1
|
机器学习/深度学习 算法 数据可视化
深度学习在医学影像分析中的应用与挑战
本文深入探讨了深度学习技术在医学影像分析领域的应用及其面临的主要挑战。通过引用最新的科研数据和实验证据,文章揭示了深度学习如何提高诊断准确性、加速疾病检测过程,并辅助临床决策。同时,本文也分析了深度学习模型在可解释性、数据隐私、模型泛化能力等方面遇到的关键问题,并提出了相应的解决策略。通过对现有文献的综合分析,本文旨在为深度学习在医学影像分析领域的进一步研究和应用提供科学严谨的参考和指导。
247 15
|
机器学习/深度学习 监控 数据可视化
Scikit-learn与可视化:让机器学习结果更直观
【4月更文挑战第17天】本文探讨了如何使用Scikit-learn和可视化工具使机器学习结果更直观。Scikit-learn作为Python的开源机器学习库,结合Matplotlib、Seaborn等可视化库,便于数据探索、模型训练过程监控及结果展示。通过示例代码,展示了数据探索的pairplot、模型训练准确率曲线的绘制以及聚类结果的散点图,强调了可视化在提升模型理解度和应用普及性上的作用。随着可视化技术进步,机器学习将变得更直观易懂。
|
量子技术
什么是量子计算?
【5月更文挑战第20天】什么是量子计算?
487 2
|
弹性计算 Linux 数据中心
阿里云香港云服务器怎么样,访问速度快不快?
阿里云香港云服务器怎么样,访问速度快不快? BGP多线精品线路访问速度快,阿里云香港云服务器稳定价格优惠,30M大带宽香港云服务器288元一年