1、koa2背景
Express简介:

koa是Express的下一代基于Node.js的web框架,目前有1.x和2.0两个版本. 虽然Express的API很简单,但是它是基于ES5的语法,要实现异步代码,只有一个方法:回调。

如果异步嵌套层次过多,代码写起来就非常难看, 虽然可以用async这样的库来组织异步代码,但是用回调写异步实在是太痛苦了!

koa 1.0简介:

随着新版Node.js开始支持ES6,Express的团队又基于ES6的generator重新编写了下一代web框架koa。和Express相比,koa 1.0使用generator实现异步。

var koa = require('koa');
var app = koa();app.use('/test', function *() {
yield doReadFile1();
var data = yield doReadFile2();
this.body = data;
});

app.listen(3000);
用generator实现异步比回调简单了不少,但是generator的本意并不是异步。Promise才是为异步设计的,但是Promise的写法……想想就复杂。因此2.0应运而生。

koa 2.0简介:

koa团队并没有止步于koa 1.0,他们非常超前地基于ES7开发了koa2,和koa 1相比,koa2完全使用Promise并配合async来实现异步。

app.use(async (ctx, next) => {
await next();
//ctx -- context上下文:ctx是Koa传入的封装了request和response的变量
ctx.response.type = 'text/html';
ctx.response.body = '<h1>Hello, Koa2!</h1>'
});

什么感觉?是不是很爽?异步-同步的感觉

2、koa2入门
步骤一:新建文件夹 learnKoa

步骤二:新建 app.js

'use strict';
const Koa = require('koa');const app = new Koa();
app.use(async (ctx, next) => {
await next();
//ctx -- context上下文:ctx是Koa传入的封装了request和response的变量
ctx.response.type = 'text/html';
ctx.response.body = '<h1>Hello, Koa2!</h1>'
})app.listen(3000)console.log('app started at port 3000...')

步骤三:新建 package.json

{
"name": "learn-koa2",
"version": "1.0.0",
"description": "learn Koa 2",
"main": "app.js",
"scripts": {
"start": "node app.js"
},
"keywords": [
"koa",
"async"
],
"author": "david pan",
"dependencies": {
"koa": "2.0.0"
}
}

步骤四:npm install

步骤五:npm run start, 浏览器打开http://localhost:3000/,恭喜你,踏上新的征途!

3、koa middleware
async函数称为middleware

'use strict';
const Koa = require('koa');const app = new Koa();app.use(async (ctx, next) => {console.log(`${ctx.request.method} ${ctx.request.url}`);// 打印URLawait next(); // 调用下一个middleware});

app.use(async (ctx, next) => { const start = new Date().getTime(); // 当前时间await next();// 调用下一个middlewareconst ms = new Date().getTime() - start;// 耗费时间console.log(`Time: ${ms}ms`);// 打印耗费时间});

app.use(async (ctx, next) => {await next();//ctx -- context上下文:ctx是Koa传入的封装了request和response的变量ctx.response.type = 'text/html';ctx.response.body = '<h1>Hello, Koa2!</h1>'});

app.listen(3000);console.log('app started at port 3000...');

注意点:

a. koa把很多async函数组成一个处理链,每个async函数都可以做一些自己的事情,然后用await next()来调用下一个async函数。

b. middleware的顺序很重要,也就是调用app.use()的顺序决定了middleware的顺序。

c. 如果一个middleware没有调用await next(), 后续的middleware将不再执行。

例如:一个检测用户权限的middleware可以决定是否继续处理请求,还是直接返回403错误

app.use(async (ctx, next) => {
if (await checkUserPermission(ctx)) {
await next();
} else {
ctx.response.status = 403;
}
});

————————————————
版权声明:本文为CSDN博主「空谷足音 -จุ」的原创文章

nodejs koa2相关推荐

  1. nodejs+Koa2实现小程序的微信支付请求(一)

    nodejs+koa2 实现微信支付请求 在开发之前我们先看一下小程序向微信请求支付的业务流程 第一步,小程序先发起支付请求 小程序首先先向"商家系统后台"发起请求支付,也就是我们 ...

  2. Nodejs+Koa2+云服务ECS 开发微信公众号(一)之环境配置

    硬件准备工作 1. 本人采用阿里云的云服务器,购买了入门级云服务ECS(293元每年): 2.针对服务器进行认证,设置个人服务器密码: 3.购买数据盘,并将其挂载于云服务器之上(建议挂载在/home下 ...

  3. nodejs+koa2实现微信小程序签名和请求支付(二)

    废话不多说直接上代码: const getTradeNo = function() {let date = new Date();let arr = [date.getFullYear(),((dat ...

  4. Nodejs koa2读取服务器图片返回给前端直接展示

    项目目录结构 Project ├── app.js 程序文件 ├── images 图片目录 │ ├── default.png 默认图片 │ ├── xxxxxxx.png 其他图片 │ └── y ...

  5. 全栈项目|小书架|服务器端-NodeJS+Koa2 实现搜索功能

    搜索功能会包含:热搜.搜索列表. 热搜功能在电商的搜索中经常看到,热搜数据的来源有两种 用户真实的搜索数据,根据算法进行排序 人为推送的数据 想想微博热搜是可以买的就知道热搜功能多么重要了. 我采用第 ...

  6. koa2 mysql sequelize_使用nodejs-koa2-mysql-sequelize-jwt 实现项目api接口

    nodejs-koa2-mysql-sequelize-jwt 技术栈:nodejs, koa2, mysql, sequelize, jwt 项目数据层和操作层分明 使用koa2框架中间件,参数处理 ...

  7. vue+node+mongodb 搭建一个完整博客

    Vue + Node + Mongodb 开发一个完整博客流程 前言 前段时间刚把自己的个人网站写完, 于是这段时间因为事情不是太多,便整理了一下,写了个简易版的博客系统 服务端用的是 koa2框架 ...

  8. Docker容器化技术教程,24小时快速入门

    Docker介绍 Docker简介和安装 Docker是什么 为什么使用Docker 和普通虚拟机的对比 打包.分发.部署 小结 Docker部署的优势 Docker通常用来做什么 重要概念:镜像.容 ...

  9. Ubuntu中docker的安装和使用

    Ubuntu 中docker安装和使用 安装VMware16 安装Ubuntu22.04 安装docker Docker的主要作用 起到一个"容器"(代码+环境)的作用,解决了软件 ...

  10. 【笔记-node】《imooc-nodejs入门到企业web开发中的应用》

    目录 课程名 备注 入门必学 nodejs入门到企业web开发中的应用 框架与工具 node.js+koa2+mysql打造前后端分离精品项目<旧岛> 项目实战 20190317-2020 ...

最新文章

  1. 工厂模式(Factory)(转)
  2. MongoDB Wiredtiger存储引擎实现原理——Copy on write的方式管理修改操作,Btree cache...
  3. SpringMVC接收ajax请求并回传json数据,配置的步骤及问题解决。No converter found for type ArrayList with Content-Type null
  4. vue transition
  5. pyecharts对于经纬度_一文带你掌握Pyecharts地理数据可视化的方法
  6. oracle 02085,OracleDBLink创建和维护以及ORA-02085解决办法
  7. 体积的2 3科学计算机怎么算,小学三年级上册科学第2课-测量体积教案-冀人版
  8. Android 图片缩略图显示
  9. 压缩JS方法:uglifyjs
  10. python生成wifi字典_用Python自带的itertools生成穷举字典
  11. 熊猫关键词工具v2.8.1.0绿色版SEO工具
  12. 重磅!微信 3.0 客户端支持刷朋友圈了!从此爱上上班还是无心上班?
  13. java的一些学习网址。。。。。
  14. ajax提交图片流,img显示
  15. 激光打印机维护保养完全手册
  16. 编程王 kingofcoders.com
  17. AI-人工智能学习线路图
  18. 平面设计工作的8个基本技能
  19. EC2 Instance扩容EBS卷容量
  20. 和平精英微信登录服务器连接失败,和平精英微信登录不了怎么办

热门文章

  1. 基于Visual C++2010 混合Python编程以及Python简介
  2. 第九十四章 属性关键字 - Calculated
  3. 解决开启hbase后Hmaster过一会就消失问题
  4. 毕业设计-基于微信小程序的党建红色系统
  5. Git:合并提交节点到其它分支的详细操作[git cherry-pick]
  6. 少样本学习综述:技术、算法和模型
  7. 北海康成通过聆讯:核心产品处于临床阶段,两年半亏损14亿元
  8. python:实现平均阈值算法(附完整源码)
  9. Tokyo Tyrant基本规范(5)--教程
  10. DBC格式解析(以文本形式打开)