博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
从零开始学Koa2(一)
阅读量:5789 次
发布时间:2019-06-18

本文共 2677 字,大约阅读时间需要 8 分钟。

一、Koa 框架介绍

Node.js 是一个异步的世界,官方 API 支持的都是 callback 形式的异步编程模型,这 会带来许多问题,例如:1、callback 嵌套问题 2、异步函数中可能同步调用 callback 返回 数据,带来不一致性。为了解决以上问题 Koa 出现了。

Koa -- 基于 Node.js 平台的下一代 web 开发框架

koa 是由 Express 原班人马打造的,致力于成为一个更小、更富有表现力、更健壮的 Web 框架。 使用 koa 编写 web 应用,可以免除重复繁琐的回调函数嵌套, 并极大地提 升错误处理的效率。koa 不在内核方法中绑定任何中间件, 它仅仅提供了一个轻量优雅的 函数库,使得编写 Web 应用变得得心应手。开发思路和 express 差不多,最大的特点就是 可以避免异步嵌套。

Koa 学习网站:

  • 英语官网:
  • 中文官网:

二、Koa2.x 框架的安装使用

1、安装 Node.js 8.x 以上的版本

开发 Koa2 之前,Node.js 是有要求的,它要求 Node.js 版本高于 V7.6。因为 node.js 7.6 版本 开始完全支持 async/await,所以才能完全你支持我们的 Koa2。

2、安装 Koa:

安装 Koa 框架和我们以前安装其他模块是一样的。

# 初始化package.jsonnpm init# 安装koa2 npm install --save koa / cnpm install --save koa复制代码

简单使用:

/引入 Koaconst koa=require('koa'); const app=new koa();//配置中间件 (可以先当做路由) app.use( async (ctx)=>{     ctx.body='hello koa2'})//监听端口 app.listen(3000);console.log(' starting at port 3000')复制代码

编写完成后在命令行中输入:

node index.js复制代码

然后在浏览器中输入: 就可以看到结果了。

三、Koa异步处理Async 、Await和Promise 的使用(重点*)

async 是“异步”的简写,而 await 可以认为是 async wait 的简写。所以应该很好理解 async 用于申明一个 function 是异步的,而 await 用于等待一个异步方法执行完成。

简单理解:

  • async 是让方法变成异步。
  • await 是等待异步方法执行完成。

详细说明:

async 是让方法变成异步,在终端里用 node 执行这段代码,你会发现输出了 Promise {‘Hello async’ },这时候会发现它返回的是 Promise。

async function testAsync(){     return 'Hello async';}const result = testAsync(); console.log(result);复制代码
PS E:\code\BXShop> node async.js Promise { 'Hello async' }复制代码

await 在等待 async 方法执行完毕,其实 await 等待的只是一个表达式,这个表达式在官方 文档里说的是 Promise 对象,但是它也可以接受普通值。 注意:await 必须在 async 方法中 才可以使用因为 await 访问本身就会造成程序停止堵塞,所以必须在异步方法中才可以使用。

function getData(){    return 'zhangsan';}async function testAsync(){    return 'Hello async';}复制代码
sync function test(){    const v1=await getData();     const v2=await testAsync();    console.log(v1,v2);} test();复制代码

async/await 同时使用

async 会将其后的函数(函数表达式或 Lambda)的返回值封装成一个 Promise 对象,而 await 会等待这个 Promise 完成,并将其 resolve 的结果返回出来。

function findData() {    return new Promise(resolve => {        setTimeout(() =>              resolve("long_time_value"),1000        );    });}async function test() {    const v = await findData();    console.log(v);} test();复制代码

async/await 的特点:

  • 可以让异步逻辑用同步写法实现
  • 最底层的await返回需要是Promise对象
  • 可以通过多层syncfunction的同步写法代替传统的callback嵌套

四、koa2简析结构

源码文件

├── lib│   ├── application.js│   ├── context.js│   ├── request.js│   └── response.js└── package.json复制代码

这个就是 GitHub

  • application.js 是整个koa2 的入口文件,封装了context,request,response,以及最核心的中间件处理流程。
  • context.js 处理应用上下文,里面直接封装部分request.js和response.js的方法
  • request.js 处理http请求
  • response.js 处理http响应

koa2特性

  • 只提供封装好http上下文、请求、响应,以及基于async/await的中间件容器。
  • 利用ES7的async/await的来处理传统回调嵌套问题和代替koa@1的generator,但是需要在node.js 7.x的harmony模式下才能支持async/await。
  • 中间件只支持 async/await 封装的,如果要使用koa@1基于generator中间件,需要通过中间件koa-convert封装一下才能使用。

转载地址:http://pemyx.baihongyu.com/

你可能感兴趣的文章
【348天】每日项目总结系列086(2018.01.19)
查看>>
【294天】我爱刷题系列053(2017.11.26)
查看>>
可替换元素和非可替换元素
查看>>
2016/08/25 The Secret Assumption of Agile
查看>>
(Portal 开发读书笔记)Portlet间交互-PortletSession
查看>>
搭建vsftpd服务器,使用匿名账户登入
查看>>
JAVA中循环删除list中元素的方法总结
查看>>
Java虚拟机管理的内存运行时数据区域解释
查看>>
人人都会深度学习之Tensorflow基础快速入门
查看>>
ChPlayer播放器的使用
查看>>
js 经过修改改良的全浏览器支持的软键盘,随机排列
查看>>
Mysql读写分离
查看>>
探寻Interpolator源码,自定义插值器
查看>>
一致性哈希
查看>>
Web日志安全分析工具 v2.0发布
查看>>
JS重载
查看>>
python2和python3同安装在Windows上,切换问题
查看>>
php加速工具xcache的安装与使用(基于LNMP环境)
查看>>
android超链接
查看>>
统计数据库大小
查看>>