关于koa:Koa入门教程1开端

29次阅读

共计 2718 个字符,预计需要花费 7 分钟才能阅读完成。

前言

Koa 是一个粗劣玲珑的基于 Node.js 的 Web 框架。目前有 1.x2.x 2 个大的版本

其中 2.x 版本应用了 Node.js v7.6.0 之后反对的 async await 语法糖,提供了更优雅的异步编程模式。

Koa 有如下特点:

  • 内核精简,不内置中间件. 玲珑但富裕表现力。
  • 相似栈的形式运行中间件,Koa 调用上游,而后堆栈开展再将管制再流回上游。简略实用
  • 实用 async await 或 generator 防止了 callback hell
  • 优雅的异样捕捉

Koa 通过下面的机制防止了以往 connect 等实现的一些问题,例如要实现一个耗时统计时须要将 startTime 层层传递到开端中间件。Koa 与 express 和 connect 的差异如下:

为了一探 Koa 的全貌,咱们基于 Koa 1.x 的版本来开始学习之旅 (次要是为了学习 generator,其余方面 1 和 2 其实原理是一样的)。前面打算的教程如下:

  1. 开始。装置和启动
  2. 罕用中间件
  3. 错误处理和最佳实际
  4. 开发并部署一个 todo-list 利用
  5. 降级为 Koa2
  6. 初探 Koa 源码

装置

应用 Koa 搭建一个 Web 利用是极其简略的。Koa 模块裸露了一个 Application 的 class 给 Web 开发者,咱们只需实例化这个 Application,并给它注入适当的 申请和响应解决逻辑 . 实际上,整个 Koa 利用的开发模式就是如此简略。

上面是步骤:

  1. 进入咱们的我的项目目录,装置 Koa
# 初始化 package.json
npm init
# 装置 Koa 1.x
npm i koa@1 -d
  1. 在咱们的我的项目目录创立一个 index.js 文件,用于编写 Web 站点的次要逻辑
const Koa = require('koa')
const app = new Koa() // 实例化一个 Koa 利用
app.listen(3000) // 让 Koa 启动内置 server

这样利用便启动了,并监听了本机的 3000 端口。实际上 http server 也能够不禁 Koa 来启动,你能够导出 Koa 的 handler,配合本人的 TSW 或 其余 Server 来应用:

const server = http.createServer(app.callback())
server.listen(3000)

下面的代码目前还没有任何的申请解决逻辑。Koa 是通过给 application 注入中间件函数的形式来注入 业务逻辑。

中间件

Koa 的中间件很像 Express 的中间件,也是对 HTTP 申请进行解决的函数,然而必须是一个 Generator 函数。而且,Koa 的中间件是一个级联式(Cascading)的构造,也就是说,属于是层层调用,第一个中间件调用第二个中间件,第二个调用第三个,以此类推。上游的中间件必须等到上游的中间件返回后果,才会继续执行,这点很像递归

从中间件的执行流程能够看出,第一个被执行的中间件,其也会在最初再次回到该中间件并执行剩下的代码逻辑。

Koa 的中间件顺次执行来解决接管的 requests 并响应一个 response。每一个中间件都能拜访到 context 对象,这是一个封装了原生 Node 申请和响应的对象,并提供了许多开发 web 利用和 API 有用的办法。在 Koa 1 外面,每个中间件就是一个 Generator 函数,咱们看这个例子:

const Koa = require('koa')
const app = new Koa() // 实例化一个 Koa 利用
// 日志中间件
const mylogger = function *(next) {
    yield next
    // 在 Koa1 版本 的 Generator 中间件函数中,this 示意 context 对象
    const rt = this.response.get('X-Respnose-Time')
    console.log(`${this.method} ${this.url} - ${rt}`)
}

// x-response-time 中间件
const mytime = function *(next) {const start = Date.now()
    yield next
    const ms = Date.now() - start
    this.set('X-Response-Time', `${ms}ms`)
}

// 业务逻辑
const mylogic = function *(next) {this.body = 'hello koa 1'}

app.use(mylogger)
app.use(mytime)
app.use(mylogic)
app.listen(3000) // 让 Koa 启动内置 server

这个例子里,给 Koa 传入了 3 个中间件,每个中间件是个 Koa1.x 反对的 Generator 函数。基于 Generator 的反对,咱们能够在外面书写异步代码,应用 yield 来暂停函数的执行。

基于首个中间件内 Generator 异步的调用,整个 Koa 中间件相当于被卷入一个栈中,并造成如下的调用程序:

|  ↑
|  |
|  |
|  |
↓  |

在控制台,咱们能够看到打印出了一次申请的耗时。

GET / - 1ms

学习思路

学习 Koa, 其实就是学习 Koa 的 4 个对象:

  • Application 类型的实例属性和办法(次要用作 Web 利用的设置和启动)
  • context 上下文对象, 它是包裹了 Node.js 的 http request 和 response 对象,同时又提供了 Koa 的一些办法和属性供开发者应用
  • Koa request 对象。这个便是 context.request(Koa 1 外面是 this.request),是 Koa 为了开发不便提供的一些跟 http 申请相干的办法
  • Koa response 对象。这个便是 context.response(Koa 1 外面是 this.response),是 Koa 为了开发不便提供的跟 http 响应无关的办法

因而实际上咱们能够简略了解为,编写中间件代码时,只须要学习一个对象:context。context 对象会在 Koa 接管到任意一个申请后,执行中间件之前初始化,并传递给中间件。它有如下几个必要的属性:

  • request:指向 Request 对象
  • response:指向 Response 对象
  • req:指向 Node 的 request 对象
  • res:指向 Node 的 response 对象
  • app:指向 App 对象
  • state:用于在中间件传递信息。

更多的属性和办法文档,间接参考官网好了

路由

Koa 外围不携带任何中间件,路由也是。前面咱们会介绍路由中间件的原理和用法。

视图渲染

Koa 外围不蕴含任何模板引擎的反对,如果需渲染视图,咱们须要引入相应的视图中间件。

总结

Koa 提供了比 express 更精简的内核,相似 connect 的中间件机制,更 fasion 的异步流程管制办法(1.x 是 generator 2.x 是 async 语法)。兼具精简、高效、灵活性,是个优良和值得学习的框架

正文完
 0