⚡ 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);
webapp
公众号
开发者导航
切换夜间模式
点击侧边栏上一篇
点击侧边栏下一篇
折叠侧边栏
收起全部