egg外掛編寫

mocept發表於2019-02-16

程式碼地址 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即可請求, 外掛儘量可擴充

  • 以及登入後和單點(被動)登入後的跳轉地址的配置

相關文章