egg插件編寫

代碼地址 https://github.com/MoceptWeb/...
看以前肯定至少了解了egg的文檔了, 否則看下面是浪費時間哈;本人只寫了重點須要注意的地方!不對的地方請多多指教

npm包方式

若是代碼還不完善還不想發佈,能夠直接在項目文件中 npm link npm包目錄文件夾

package.json

name和eggPlugin字段javascript

"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中的方法儘可能當前插件相關的加前綴, 防止互相干擾java

或者掛一個你的對象,方法在它上面便可,如 app.passport.xx
  • context.js

暴露方法給外部項目直接調用node

  • helper.js

統一封裝了內部請求和mysql鏈接(多數據和單數據庫鏈接的區分),操做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

則是一些數據相關的操做git

middleware

  • middleware位置

在app.js入口控制插件中的全部middleware執行順序github

固然能夠加入配置項目, 指定在哪一個外部項目中的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便可請求, 插件儘可能可拓展sql

  • 以及登陸後和單點(被動)登陸後的跳轉地址的配置
相關文章
相關標籤/搜索