Sen descrición

lrf c952cc9a45 更新 'config/config.default.js' %!s(int64=2) %!d(string=hai) anos
.github 8a82f28a71 init %!s(int64=3) %!d(string=hai) anos
app 2cac367ec8 添加init服务 %!s(int64=3) %!d(string=hai) anos
config c952cc9a45 更新 'config/config.default.js' %!s(int64=2) %!d(string=hai) anos
test ddba4c236f update %!s(int64=3) %!d(string=hai) anos
.autod.conf.js 8a82f28a71 init %!s(int64=3) %!d(string=hai) anos
.eslintignore 8a82f28a71 init %!s(int64=3) %!d(string=hai) anos
.eslintrc 8a82f28a71 init %!s(int64=3) %!d(string=hai) anos
.gitignore 8a82f28a71 init %!s(int64=3) %!d(string=hai) anos
.travis.yml 8a82f28a71 init %!s(int64=3) %!d(string=hai) anos
README.md 8a82f28a71 init %!s(int64=3) %!d(string=hai) anos
app.js ddba4c236f update %!s(int64=3) %!d(string=hai) anos
appveyor.yml 8a82f28a71 init %!s(int64=3) %!d(string=hai) anos
ecosystem.config.js beb4fa80fe pm2 file %!s(int64=3) %!d(string=hai) anos
package.json 8a82f28a71 init %!s(int64=3) %!d(string=hai) anos
server.js 86639748da update %!s(int64=3) %!d(string=hai) anos
tenant.md b23fad8e8c update %!s(int64=3) %!d(string=hai) anos

README.md

service

食堂服务端

多租户,model下如果是多层级,需要修改框架的application.js

naf-framework-mongoose => lib => plugin => egg-multi-tenancy => app => extend => application.js

const loadModel2 = (app, tenant) => {
  app.logger.info(`[multi-tenancy] Load tenant models for ${tenant}`);
  let model = {};
  const setModel = (val,key) =>{
    const obj = {};
    const modelName = `${val.modelName}@${tenant}`;
    const collName = `${val.collection.name}`;
    const multiTenancy = val.schema.get('multi-tenancy');
    if (multiTenancy) {
      app.logger.debug(`[multi-tenancy] ${modelName} loaded`);
      const schema = val.schema.clone();
      schema.set('x-tenant', tenant);
      schema.plugin(multiTenancyPlugin, app.config.multiTenancy);
      obj[key] = val.db.model(modelName, schema, collName);
    } else {
      app.logger.debug(`[multi-tenancy] skip ${val.modelName}, schema not enable multi-tenancy.`);
      obj[key] = val;
    }
    return obj;
  }

  _.forEach(app.model, (val, key) => {
    const nval = getAllModel(val);
    // 文件夹分层级后,val不再只是Function,也有可能是Object,添加个方法,获取所有model
    if(!_.isArray(nval)) {
      let mod = {};
      mod = setModel(nval,key);
      model = {...model,...mod};
    }
    else {
      let mods = {};
      mods[key] = {};
      for (const model of nval) {
        const nkey = _.upperFirst(model.modelName);
        let mod = setModel(model,nkey);
        mods[key] = {...mods[key],...mod};
      }
      model = {...model,...mods};
    }

  });
  return model;
};

const getAllModel = data => {
  if(_.isFunction(data)) return data;
  const keys = Object.keys(data);
  const arr = [];
  for (const key of keys) {
    const model = data[key];
    if(_.isFunction(model)) arr.push(model)
    else arr.push(...getAllModel(model))
  }
  return arr;
}