node.js && egg.js

发布于:2024-04-27 ⋅ 阅读:(29) ⋅ 点赞:(0)

EggNode.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);
}