Koa学习
Koa由 Express 幕后的原班人马打造 ,因此里面的一些函数与Express相类似,Koa通过利用async函数,Koa帮你丢弃回调函数,增强了错误处理。Koa没有绑定任何中间件,可以利用优雅的方法快速的编写服务端应用程序。
安装
node 版本需要 v7.6.0 以上
$ nvm install 7
$ npm i koa
$ node my-koa-app.js
应用程序
Koa应用程序时一个包含一组中间件函数的对象,按照类似堆栈的方式组织和执行 。
Koa在低级中间件中提供高级“语法糖”,提高互操作性和稳健性。
基本用法
架设HTTP服务
const Koa = require('koa');
const app = new Koa();
app.listen(3000);
运行脚本之后访问 http://127.0.0.1:3000 即可
上下文对象
Koa提供一个上下文对象,表示一次对话的上下文(包括了HTTP请求和HTTP响应)
Context.response.body属性(ctx)就是发给用户的内容,即设置其属性值即可显示值。
HTTP响应的类型
Koa默认返回类型时text/plain,可以用 ctx.request.accepts 判断客户端接受的数据,接着使用ctx.response.type指定返回类型。
网页模板
可以使用fs组件const fs = require('fs');接着使用fs.createReadStream(url)读取文件
koa-route模块
const route = require('koa-route');
const main = ctx => {
ctx.response.type = 'html';//类型
ctx.response.body = '<a href="/">Index Page</a>';//网页的内容
};
app.use(route.get('/', main));
静态资源
koa-static模块封装了提供静态资源(图片,字体,样式表,脚本......)
const path = require('path');
const serve = require('koa-static');
const main = serve(path.join(__dirname));
app.use(main);
重定向
ctx.response.redirect(url) , 该方法可以发出一个302重定向,将用户重定向另一个路由
中间件
const logger = (ctx, next) => {
console.log(`${Date.now()} ${ctx.request.method} ${ctx.request.url}`);
next();
}
app.use(logger);
Koa所有的功能都是通过中间件实现的 ,第一个参数是Context对象,第二个参数是next函数。只要调用next函数,就可以把执行权转交给下一个中间件
注意: 多个中间件会形成一个栈结构(中间堆栈),以“先进后出”(先进先出)的顺序执行,即会进行类似剥“洋葱”模型。
Koa与Express框架的区别
核心Koa模块只是中间件内核,Express包含了一个完整的应用程序框架。Koa你需要包含所需的模块才能使用,但是这就使得Koa组件非常的小而Express组件就较为庞大。
Koa对Express进行了扩展,充分利用了ES7新的语法。Koa的Context对象是对Express核心请求和应答对象的扩展,另外利用async/await来消除回调(callback)陷阱