跳到主要内容

Koa 的 ctx 是什么如何使用

· 阅读需 2 分钟
素明诚
Full stack development

ctx 在 Koa 中是上下文(Context)的缩写,它是一个封装了 Node.js 的 requestresponse 对象的对象,用于在中间件之间传递信息和状态。下面是一个简单的例子来说明这个过程

const Koa = require('koa');
const app = new Koa();

// 第一个中间件
app.use(async (ctx, next) => {
// 设置一个用户信息对象到 ctx.state,这个是中间件间共享的状态对象
ctx.state.user = { name: '张三', age: 30 };
await next(); // 调用下一个中间件
});

// 第二个中间件
app.use(async (ctx, next) => {
// 读取上一个中间件设置的用户信息
const user = ctx.state.user;
// 做一些操作,比如权限检查
if (user.name === '张三') {
await next(); // 用户名匹配,继续下一个中间件
} else {
ctx.status = 403; // 用户名不匹配,返回403 Forbidden
}
});

// 第三个中间件
app.use(async (ctx) => {
// 再次读取用户信息,用于生成响应
const user = ctx.state.user;
// 设置响应体为用户信息
ctx.body = `欢迎 ${user.name},您的年龄是 ${user.age}岁`;
});

app.listen(3000);

第一个中间件在 ctx.state 对象上设置了 user 对象。

第二个中间件检查了 ctx.state.user,并根据用户信息决定是否继续执行下一步。

第三个中间件使用了 ctx.state.user 来构建响应。