Node 主要用在开发 Web 应用。这决定了使用 Node,往往离不开 Web 应用框架。
Koa 就是一种简单好用的 Web 框架。它的特点是优雅、简洁、表达力强、自由度高。本身代码只有1000多行,所有功能都通过插件实现。
node -v
Koa 必须使用 7.6 以上的版本。如果你的版本低于这个要求,就要先升级 Node。
然后,克隆本文的配套示例库。
$ git clone https://github.com/ruanyf/koa-demos.git
接着,进入示例库,安装依赖。
$ cd koa-demos
$ npm install
只要三行代码,就可以用 Koa 架设一个 HTTP 服务。
// demos/01.js
const Koa = require('koa');
const app = new Koa();
app.listen(3000);
运行这个脚本
$ node demos/01.js
打开浏览器,访问 http://127.0.0.1:3000 。你会看到页面显示"Not Found",表示没有发现任何内容。这是因为我们并没有告诉 Koa 应该显示什么内容。
Koa 提供一个 Context 对象,表示一次对话的上下文(包括 HTTP 请求和 HTTP 回复)。通过加工这个对象,就可以控制返回给用户的内容。
Context.response.body属性就是发送给用户的内容
// demos/02.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。
运行这个 demo。
$ node demos/02.js
访问 http://127.0.0.1:3000 ,现在就可以看到"Hello World"了。
Koa 默认的返回类型是text/plain,如果想返回其他类型的内容,可以先用ctx.request.accepts判断一下,客户端希望接受什么数据(根据 HTTP Request 的Accept字段),然后使用ctx.response.type指定返回类型
// demos/03.js
const main = ctx => {
if (ctx.request.accepts('xml')) {
ctx.response.type = 'xml';
ctx.response.body = 'Hello World';
} 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 = 'Hello World
';
} else {
ctx.response.type = 'text';
ctx.response.body = 'Hello World';
}
};
运行这个 demo。
$ node demos/03.js
访问 http://127.0.0.1:3000 ,现在看到的就是一个 XML 文档了。
实际开发中,返回给用户的网页往往都写成模板文件。我们可以让 Koa 先读取模板文件,然后将这个模板返回给用户。请看下面的例子
// demos/04.js
const fs = require('fs');
const main = ctx => {
ctx.response.type = 'html';
ctx.response.body = fs.createReadStream('./demos/template.html');
};
运行这个 Demo。
$ node demos/04.js
访问 http://127.0.0.1:3000 ,看到的就是模板文件的内容了。
参考链接:http://www.ruanyifeng.com/blog/2017/08/koa.html