一 什么是Koa2

1 Nodejs官方api支持的都是callback形式的异步编程模型。问题:callback嵌套问题

2 koa2 是由 Express原班人马打造的,是现在比较流行的基于Node.js平台的web开发框架,它很小,但扩展性很强。使用koa编写web应用,可以免除重复繁琐的回调函数。

二 Koa2有什么优点

async/await

async会将其后的函数的返回值封装成一个Promise对象

await会等待这个Promise完成,并将其resolve的结果返回出来
复制代码

三 Koa2基础API

3.1 环境搭建

node > 7.6 Koa支持async方法
npm init
npm install --save koa
复制代码

3.2 代码示例

const Koa = require('koa')
const app = new Koa()

app.use((ctx, next) => {
  ctx.body = 'hello koa2!'
})
app.listen(8032)
复制代码

3.3 app实例属性

3.3.1 app.context

app.context为 ctx 添加其他属性

app.context.db = db();
app.use(async ctx => {
    console.log(ctx.db);
});
复制代码

3.3.2 app.use

app.use 给定的中间件方法添加到此应用

app.use(async ctx => {
    console.log('我是中间件');
});
复制代码

3.4 上下文 context

context封装了node中的request 和 response

app.use(async ctx => {
  ctx; // 这是 Context
  ctx.request; // 这是 koa Request
  ctx.response; // 这是 koa Response
});
复制代码

3.4.1 ctx属性api

3.4.2 request/response

3.5中间件

3.5.1 通俗的讲

中间件就是匹配路由之前或者匹配路由完成做的一系列的操作。
和express中间件类似 他可以访问请求对象requset和响应对象response

3.5.2 中间件功能

执行任何代码
修改请求和响应对象
终结请求-响应循环
调用堆栈中的下一个中间件
复制代码

3.5.3 几种常用中间件介绍

1 路由中间件
const Koa = require('koa')
const app = new Koa()
const Router = require('koa-router')
const router = new Router()

router.get('/', (ctx) => {
  ctx.body = '首页'
})
router.get('/news', (ctx) => {
  ctx.body = '新闻页面'
})

app.use(router.routes())
app.use(router.allowedMethods())
app.listen(8032)
复制代码

原生路由如何实现呢?

const Koa = require('koa')
const app = new Koa()

app.use(async (ctx, next) => {
  if (ctx.path === '/') {
    ctx.body = '首页'
  } else if (ctx.path === '/news') {
    ctx.body = JSON.stringify({
      sex: '男',
      hobby: '萌妹子'
    });
  } else {
    ctx.body = '404'
  }
})
app.listen(8032)
复制代码
2 静态资源中间件

设置public目录下的文件为静态路由

const Koa = require('koa')
const app = new Koa()
const serve = require('koa-static')
const path = require('path')

app.use(serve(path.join(__dirname, 'public'), {
  maxAge: 24 * 60* 60 * 1000
}));

app.listen(8032)
复制代码

localhost:8032/index.html

localhost:8032/index.css

localhost:8032/index.js

localhost:8032/bazinga.png

3 koa-bodyparser中间件

对于post请求的处理,bodyparser可以把koa2上下文的formdata数据解析到ctx.request.body中

const Koa = require('koa')
const app = new Koa()
const bodyParser = require('koa-bodyparser')

app.use(bodyParser())
app.use(async (ctx, next) => {
  if (ctx.method.toUpperCase() === 'POST' && ctx.path === '/form') {
    console.log(ctx.request.body)
  }
})
app.listen(8032)
复制代码

我们用postman 来模拟post请求,传入2个参数a和b

终端会输出如下

ok,koa2基础内容分享到此结束,下一篇分享中间件

GankRobot转载声明

原文出处:掘金前端

原文作者:行走的鹿senior

原文地址:https://juejin.im/post/5d75fb975188252f6451ae4b