Sem descrição

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

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;
}