node.js Koa 框架 的基本用法

HTML5 herman 59浏览 0评论

Node 主要用在开发 Web 应用。这决定了使用 Node,往往离不开 Web 应用框架。

Koa框架

Koa 就是一种简单好用的 Web 框架。它的特点是优雅、简洁、表达力强、自由度高。本身代码只有1000多行,所有功能都通过插件实现,很符合 Unix 哲学。

安装

Koa 目前需要 >=0.11.x版本的 node 环境。并需要在执行 node 的时候附带 –harmony 来引入 generators 。 如果您安装了较旧版本的 node ,您可以安装 n (node版本控制器),来快速安装 0.11.x。

$ npm install -g n
$ n 0.11.12
$ node --harmony my-koa-app.js

如果你已经安装了Node,那么可以使用下面的命令检查版本。Koa 必须使用 7.6 以上的版本。如果你的版本低于这个要求,就要先升级 Node。

$ node -v
v8.0.0

架设 HTTP 服务

上面我们已经做好了前期的准备公司,下面我就开始用 Koa 架设一个 HTTP 服务。

const Koa = require('koa');
const app = new Koa();
app.listen(3000);

新建一个xttblog.js文件,将上面的代码写入文件,运行下面的命令:

$ node xttblog.js

打开浏览器,访问 http://127.0.0.1:3000 。你会看到页面显示"Not Found",表示没有发现任何内容。这是因为我们并没有告诉 Koa 应该显示什么内容。

Context 对象

Koa 提供一个 Context 对象,表示一次对话的上下文(包括 HTTP 请求和 HTTP 回复)。通过加工这个对象,就可以控制返回给用户的内容。
Context.response.body属性就是发送给用户的内容。

我们再新建一个codedq.js,写入下面的代码:

const Koa = require('koa');
const app = new Koa();
const main = ctx => {
  ctx.response.body = 'Hello World';
};
app.use(main);
app.listen(3000);

上面代码中,main函数用来设置ctx.response.body。然后,使用app.use方法加载main函数。
你可能已经猜到了,ctx.response代表 HTTP Response。同样地,ctx.request代表 HTTP Request。

然后在执行下面的命令:

$ node codedq.js

访问 http://127.0.0.1:3000 ,现在就可以看到"Hello World"了。

HTTP Response 的类型

Koa 默认的返回类型是text/plain,如果想返回其他类型的内容,可以先用ctx.request.accepts判断一下,客户端希望接受什么数据(根据 HTTP Request 的Accept字段),然后使用ctx.response.type指定返回类型。

在 ifxvn.js 文件中写入下面的代码:

const main = ctx => {
  if (ctx.request.accepts('xml')) {
    ctx.response.type = 'xml';
    ctx.response.body = '<data>Hello World</data>';
  } else if (ctx.request.accepts('json')) {
    ctx.response.type = 'json';
    ctx.response.body = { data: 'Hello World' };
  } else if (ctx.request.accepts('html')) {
    ctx.response.type = 'html';
    ctx.response.body = '<p>Hello World</p>';
  } else {
    ctx.response.type = 'text';
    ctx.response.body = 'Hello World';
  }
}

然后运行这个文件:

$ node ifxvn.js

访问 http://127.0.0.1:3000 ,现在看到的就是一个 XML 文档了。

网页模板

实际开发中,返回给用户的网页往往都写成模板文件。我们可以让 Koa 先读取模板文件,然后将这个模板返回给用户。看下面的代码:

const fs = require('fs');
const main = ctx => {
  ctx.response.type = 'html';
  ctx.response.body = fs.createReadStream('./hellword.html');
};

运行这个 ndislwf.js。

$ node ndislwf.js

访问 http://127.0.0.1:3000 ,看到的就是hellword.html文件的内容了。

限于篇幅,我们下章继续学习 koa 框架的路由功能。