⚡ 30 秒速记
ctx汇集一次请求和响应信息- 中间件用
await next()等待下游 - 前置处理向内走,后置处理向外返回
- 外层统一捕获错误,业务写状态与响应体
- 路由、解析和上传由合适的扩展负责
Koa 的请求处理像一层层包裹:外层先做准备,等待里面完成后再收尾。 每个请求有自己的上下文,读取参数和设置响应都围绕它进行。中间件必须正确等待下游,计时、异常处理和资源清理才会覆盖整条链。框架核心较小,路由、请求体解析和上传等能力需要按实际需求组合,并注意顺序和限制条件。
版本校准: Node.js 的事件循环阶段名称相对稳定,但定时器、微任务和底层 libuv 行为会随主版本变化。回答时必须先报运行版本,再用最小脚本验证顺序;不要把浏览器事件循环或某个旧版本输出当作所有 Node.js 版本的固定结论。
Koa 就是一种简单好用的 Web 框架。它的特点是优雅、简洁、表达力强、自由度高
# 一、基本用法
# 1.1 架设 HTTP 服务
只要三行代码,就可以用
Koa架设一个HTTP服务。
const Koa = require('koa');
const app = new Koa();
app.listen(3000);
打开浏览器,访问
http://127.0.0.1:3000。你会看到页面显示"Not Found",表示没有发现任何内容。这是因为我们并没有告诉Koa应该显示什么内容
# 1.2 Context 对象
Koa提供一个Context对象,表示一次对话的上下文(包括HTTP请求和HTTP回复)。通过加工这个对象,就可以控制返回给用户的内容
Context.response.body属性就是发送给用户的内容
const Koa = require("koa");
const app = new Koa();
app.use(ctx => { //处理请求的中间件
ctx.response.body = "hello world";
}).listen(3000);
上面代码中,
main函数用来设置ctx.response.body。然后,使用app.use方法加载main函数
ctx.response代表HTTP Response。同样地,ctx.request代表HTTP Request
# 1.3 HTTP Response 的类型
Koa默认的返回类型是text/plain,如果想返回其他类型的内容,可以先用ctx.request.accepts判断一下,客户端希望接受什么数据(根据HTTP Request的Accept字段),然后使用ctx.response.type指定返回类型
const Koa = require("koa");
const app = new Koa();
app.use(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';
}
}).listen(3000);