egg-- 实现自定义模块挂载到app上
1.将自己封装的模块功能类写到一个单独文件内,并导出(exports).
//test.js
const BaseContextClass = require('egg').BaseContextClass;
exports.Test = class extends BaseContextClass {
constructor(ctx){
super(ctx);//初始化
}
.../*其他方法*/
}
2.在app.js 文件中将自定义模块挂载到 app 上
const path = require('path');
module.exports = app => {
const baseName = 'test'; //文件夹名
const baseTestDir = 'app/test';//模块目录 这里 放到 app 文件下
const ctx = app.createAnonymousContext(); // 创建一个新的执行上下文
app.loader.loadToApp( //将test模块 挂载到 app 上
path.join(app.baseDir, baseTestDir ), // path.join()的作用 :将路径片段使用特定的分隔符(window:\)连接起来形成路径,并规范化生成的路径。若任意一个路径片段类型错误,会报错。
baseName,
{
caseStyle: 'lower',//小写 this.app.模块名.小写方法名 调用
ignore: 'test.js',//忽略 test.js 文件 这里配置 你需要忽略的文件 被忽略的文件 将不能通过 this.app.模块名.方法 访问
initializer: test => { //初始化器
return new test(ctx);
}
},
);
}
3.使用:
app/test/index.js
const Test = require('test.js文件的路径'); //引入功能 类
class Home extends Test { //继承 功能类 以至于 可以通过this调用功能类内的方法
}
module.exports = Home;
在其他的文件中调用 test模块的方法:
eg:
app/service/xxx.js
this.app.test.xxx() 即可 test 为app.js 文件 内定义好的模块名