## 1.application扩展
this.app.foo()调用
~~~
app/extend/application.js
module.exports ={
foo(){
//this就是app对象,在其中可以调用app上的其他方法,或访问属性
console.log(this)
}
}
//那么在其他文件中可以通过this.app.foo()调用这个方法
~~~
~~~
//app/controller/home.js
'use strict';
const Controller = require('egg').Controller;
class HomeController extends Controller {
async index() {
this.app.foo()
await this.ctx.render('index',{data:"首页的世界"})
}
}
module.exports = HomeController;
~~~
## 2.context扩展
~~~
//app/extend/context.js
module.exports ={
getIp(){
return this.request
}
}
~~~
~~~
//在其他文件中通过this.ctx.foo()调用
this.ctx.getIp();
~~~
## 3.helper扩展
![](https://box.kancloud.cn/97f703c9fc1e9f0e06b9bf6ab78792a6_1168x668.png)[extend](https://eggjs.org/zh-cn/basics/extend.html)
~~~
//app/extend/helper.js
在这个目录helper.js中定义的方法,模板中可以直接使用
//例如定义一个格式化时间的方法
// app/extend/helper.js
/* 扩展中引入第三方模块 */
const sd = require('silly-datetime');
module.exports = {
formatTime(param) {
/* 格式化日期 */
return sd.format(new Date(param * 1000), 'YYYY-MM-DD HH:mm');
},
getHelperData(){
return "我是helper里面的数据"
}
};
~~~
~~~
npm i silly-datetime -S
~~~
~~~
模板文件中直接helper.formatTime()调用
<span><%= helper.formatTime(item.dateline)%></span>
~~~
~~~
//在controller中使用,helper挂载到了ctx上面
this.ctx.helper.getHelperData();
~~~
## 4.request的扩展
request挂载在ctx上面
~~~
//app/extend/request.js
/* 外部可以通过this.ctx.request.foo()调用 */
module.exports = {
foo(){
console.log(this)
console.log('扩展request方法')
}
}
~~~