有望取代express的框架。
首次学习是看了阮一峰老师的教程
http://www.ruanyifeng.com/blog/2017/08/koa.html
详细API见官网https://koa.bootcss.com
零、安装
node -v // 版本要求7.6以上
npm init // 初始化项目,生成package.json
npm升到5以上的版本直接通过npm install来直接安装依赖,不会生成node_modules,只会生成一个package-lock.json文件,需要package.json中已有依赖才行(好像不再需要cnpm了)
"dependencies": {
"mysql": "^2.15.0"
}
npm install // 安装依赖
安装需要用到的依赖
npm install koa --save 等等
一、request与response
const Koa = require('koa');
const app = new Koa();
const main = ctx => {
if (ctx.request.accepts('text/plain')) {
ctx.response.type = 'text';
ctx.response.body = 'Hello World';
}
};
app.use(main);
二、文件流
const fs = require('fs');
ctx.response.body = fs.createReadStream('./demos/template.html');
三、路由
原生路由
ctx.request.path
koa-route 路由模块
const route = require('koa-route');
const about = ctx => { // 路由名
ctx.response.type = 'html';
ctx.response.body = '<a href="/">Index Page</a>';
};
const redirect = ctx => { // 路由名
ctx.response.redirect('/'); // 重定向
};
app.use(route.get('/about', about)); // 路由模块
四、静态public
const path = require('path');
const serve = require('koa-static');
const main = serve(path.join(__dirname));
app.use(main);
五、中间件(logger记录功能)
中间件:在request与response过程之间执行的方法(在我看来就是定义了一个普通的函数)
app.use() 加载中间件
同步中间件(先进后出)
const logger = (ctx, next) => {
next(); // 中断(进栈),执行下一个中间件,出栈掉头执行。
}
异步中间件(不就是异步函数嘛,呵呵)
const fs = require('fs.promised');
const main = async /*function*/ (ctx, next) {
ctx.response.type = 'html';
ctx.response.body = await fs.readFile('./demos/template.html', 'utf8');
};
中间件可以合并
五、抛错
ctx.response.status = 404;
ctx.throw(404)
// 我们处理报错信息一般在最外层写一个捕获所有报错的的异步中间件(捕获后不会触发error事件)
try {
await next();
} catch (err) {
ctx.response.status = err.statusCode || err.status || 500;
ctx.response.body = {
message: err.message
};
}
六、事件
app.on('error', (err, ctx) => ); // 触发
ctx.app.emit() // 释放
七、web功能
cookier读写
const n = Number(ctx.cookies.get('view') || 0) + 1;
ctx.cookies.set('view', n);
表单提交,文件上传…
弃坑。。。我还是用express吧,不习惯。。