Koa初步学习

181 阅读1分钟

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)陷阱