Egg
是 Node.js
社区广泛使用的框架,简洁且扩展性强,按照固定约定进行开发,低协作成本。
在Egg.js
框架中,ctx
是一个非常核心且常用的对象,全称为 Context
,它代表了当前 HTTP
请求的上下文。ctx
对象封装了关于当前请求的所有相关信息,并提供了丰富的操作方法,使得开发者能够便捷地处理请求、响应、中间件逻辑、数据校验、模板渲染等与请求生命周期相关的任务。
ctx.request ctx.response
ctx.path: 当前请求的路径。
ctx.routerPath: 不包含查询参数的请求路径。
ctx.method: 请求的HTTP方法(GET、POST、PUT、DELETE等)。
ctx.app: 访问到Egg应用实例,可用于操作全局应用级别的资源或配置。
ctx.cookies: 操作cookies,如读取、设置、删除。
ctx.session: 用于会话管理,支持读取、设置、销毁会话数据。
ctx.logger: 提供日志记录功能,可以根据需要记录不同级别的日志信息(debug、info、warn、error等)。
ctx.onerror(err): 用于捕获并处理在当前请求生命周期内发生的未被捕获的错误。 服务与依赖注入:
ctx.service: 访问服务层(Service)的快捷方式,用于调用业务逻辑相关的函数。
ctx.helper: 访问框架提供的辅助工具或自定义的帮助函数。
ctx.locals: 用于在中间件或控制器之间共享数据,生命周期仅限于单个请求。
在Egg.js的应用中,ctx 通常作为控制器(Controller)方法的参数传递,使得开发者可以直接在控制器中操作和响应当前请求。例如:
module.exports = {
async list(ctx) {
const userId = ctx.query.userId;
const users = await ctx.service.user.list(userId);
ctx.body = { users };
},
};
在这个例子中,ctx
被用来获取请求查询参数(ctx.query.userId
),调用服务层方法(ctx.service.user.list()
),以及设置响应体(ctx.body
)。这种设计使得代码逻辑清晰、模块化,并且易于维护和测试。
总之,ctx 在 Egg.js 中是处理 HTTP 请求的核心上下文对象,它集中了所有与当前请求相关的信息和操作,极大地简化了Web应用的开发过程。
Controller
控制器Controller
,解析用户输入,处理后返回结果;
在代理服务器中,controller将用户请求转发到其他服务器上,并将服务结果返回给用户;
app下文件夹有controller文件夹和router.js文件
controller文件夹下有home.js文件
home.js文件
const Controller = require('egg').Controller;
class HomeController extends Controller {
async index() {
this.ctx.body = 'Hello World';
}
}
module.exports = HomeController;
router.js文件
module.export = (app) => {
const { router, controller } = app;
router.get('/', controller.home.index);
}