程式碼地址 https://github.com/MoceptWeb/…
看之前確定至少了解了egg的文件了, 不然看下面是浪費時間哈;本人只寫了重點需要注意的地方!不對的地方請多多指教
npm包方式
如果程式碼還不完善還不想釋出,可以直接在專案檔案中 npm link npm包目錄資料夾
package.json
name和eggPlugin欄位
"name": "@node/egg-passport-jyb", // 包名
"eggPlugin": {
"name": "passportJyb" 這裡是在egg中真正用到的name
},
專案中使用外掛和配置
- {app_root}/app/config/plugin.js
config.passportJyb = {
`menu_code`: `loan_manage`
};
- {app_root}/app/config/config.{env}.js
exports.passportJyb = {
enable: true,
package: `@node/egg-passport-jyb`
};
npm中程式碼
extend
個人建議extend中的方法儘量當前外掛相關的加字首, 防止互相干擾
或者掛一個你的物件,方法在它上面即可,如 app.passport.xx
- context.js
暴露方法給外部專案直接呼叫
- helper.js
統一封裝了內部請求和mysql連線(多資料和單資料庫連線的區分),操作
async passportMysqlConnect() {
const portalConfig= this.app.config[`passportJyb`]
let mysqlConnect = null;
if(portalConfig.userDBClient) {
mysqlConnect = this.app.mysql.get(portalConfig.userDBClient)
} else {
mysqlConnect = this.app.mysql
}
if(!mysqlConnect) {
this.ctx.logger.error(`資料庫連線資料`);
}
return mysqlConnect;
}
service
則是一些資料相關的操作
middleware
- middleware位置
在app.js入口控制外掛中的所有middleware執行順序
當然可以加入配置專案, 指定在哪個外部專案中的middleware之後, 看各專案需求
module.exports = app => {
// 將 static 中介軟體放到 bodyParser 之前
const index = app.config.coreMiddleware.length;
// const index = app.config.coreMiddleware.indexOf(`bodyParser`);
// assert(index >= 0, `bodyParser 中介軟體必須存在`);
app.config.coreMiddleware.splice(index, 0, `passportJybAuth`);
};
config
- 配置noAuth正則url
在passportJybAuth中介軟體中 可以無需auth即可請求, 外掛儘量可擴充
- 以及登入後和單點(被動)登入後的跳轉地址的配置