框架内置基础对象
-
Application
Application(简写为app
) 是全局应用对象,在一个应用中,只会实例化一个,在应用启动时被创建,在它上面我们可以挂载一些全局的方法和对象
获取方式
Application 对象几乎可以在编写应用时的任何一个地方获取到,几乎所有被框架 Loader 加载的文件(Controller,Service,Schedule 等),都可以 export 一个函数,这个函数会被 Loader 调用,并使用 app 作为参数
ctx.app
-
Controller
,Middleware
,Helper
,Service
中都可以通过this.app
访问到Application
对象,例如this.app.config
访问配置对象。 - 在 app.js 中
app
对象会作为第一个参数注入到入口函数中
// app.js app.js 泛指Egg框架内的的js文件!!!
module.exports = app => {
// 使用 app 对象
};
-
Controller
框架提供了一个 Controller 基类,并推荐所有的 Controller 都继承于该基类实现。这个 Controller 基类有下列属性:
-
ctx 当前请求的 Context 实例。
-
app 应用的 Application 实例。
-
config 应用的配置。
-
service 应用所有的 service。
-
logger 为当前 controller 封装的 logger 对象。
在 Controller 文件中,可以通过两种方式来引用 Controller 基类:
// app/controller/user.js
// 从 app 实例上获取(推荐)
module.exports = app => {
return class UserController extends app.Controller {
// implement
};
};
// 从 egg 上获取
const egg = require('egg');
module.exports = class UserController extends egg.Controller {
// implement
};
-
自定义 Controller 基类
我们可以通过在app.js
里面为Controller
添加一些常用的方法(比如在请求成功或失败的时候给客户端返回数据时的固定格式等)来提高我们的开发效率:
// app.js
module.exports = app => {
class CustomController extends app.Controller {
get user() {
return this.ctx.session.user;
}
success(data) {
this.ctx.body = {
success: true,
data,
};
}
notFound(msg) {
msg = msg || 'not found';
this.ctx.throw(404, msg);
}
}
app.Controller = CustomController;
}
这样的方法在任何一个扩展自Controller
的类都可以调用。方便、快捷。
// app/controller/search.js
module.exports = app => {
class SearchController extends app.Controller {
* index() {
// this.ctx.body = `search: ${this.ctx.query.name}`;
// 调用基类来返回成功或者失败的数据
const res = {
name: '四月天',
nickName: '老程',
age: 26,
};
this.success(res);
}
}
return SearchController;
};
-
Context
Context 是一个请求级别的对象,在每一次收到用户请求时,框架会实例化一个 Context 对象,这个对象封装了这次用户请求的信息,并提供了许多便捷的方法来获取请求参数或者设置响应信息。
获取方式
最常见的 Context 实例获取方式是在 Middleware, Controller 以及 Service 中。
1.controller中获取
// app/controller/home.js
module.exports = app => {
class HomeController extends app.Controller {
* index() {
this.ctx.body = 'hi, egg,6666啊!!';
}
}
return HomeController;
};
-
Request & Response
Request
是一个请求级别的对象,继承自 Koa.Request。封装了 Node.js 原生的 HTTP Request 对象,提供了一系列辅助方法获取 HTTP 请求常用参数。
Response
是一个请求级别的对象,继承自 Koa.Response。封装了 Node.js 原生的 HTTP Response 对象,提供了一系列辅助方法设置 HTTP 响应。
-
获取方式
可以在 Context
的实例上获取到当前请求的 Request(ctx.request
) 和 Response(ctx.response
) 实例。
查看具体怎样来获取HTTP请求的参数 ;
-
Service
框架提供了一个 Service 基类,并推荐所有的 Service 都继承于该基类实现。
Service 基类的属性和 Controller 基类属性一致,访问方式也类似:
// app/service/user.js
// 从 app 实例上获取(推荐)
module.exports = app => {
return class UserService extends app.Service {
// implement
};
};
// 从 egg 上获取
const egg = require('egg');
module.exports = class UserService extends egg.Service {
// implement
};
网友评论