一 什么是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基础内容分享到此结束,下一篇分享中间件