背景

我们知道CabloyJS支持多个场景的跨端开发,那么不可避免,不同的场景、不同的终端,可能需要配置不同的前端config参数,比如有如下一些诉求:

  1. 微信公众号企业微信钉钉,分别显示不同的首页布局
  2. 针对不同的角色显示不同的首页布局
  3. 针对不同的用户显示不同的首页布局

后端事件:loginInfo

当页面初始化时,前端会调用后端API接口/a/base/auth/echo,返回当前用户的信息。这个API接口引发了一个后端事件loginInfo,其他模块可以响应这个事件,提供一些自定义的信息到前端

下面,我们以模块test-party为例,演示如何响应后端事件,然后提供自定义的config参数到前端

关于后端事件的完整说明,请参见:后端事件

声明事件实现

test-party/backend/src/meta.js

event: {
  implementations: {
    'a-base:loginInfo': 'loginInfoDashboard',
  },
名称 说明
a-base:loginInfo 事件的全称,格式为:模块名称:事件名称
loginInfoDashboard 响应事件的Bean组件

定义Bean组件

在本示例中,响应后端事件a-base:loginInfo,将home仪表板配置为模块test-party提供的测试仪表板

src/module/test-party/backend/src/bean/event.loginInfoDashboard.js

const require3 = require('require3');
const extend = require3('extend2');

module.exports = ctx => {
  // const moduleInfo = ctx.app.meta.mockUtil.parseInfoFromPackage(__dirname);
  class eventBean {

    async execute(context, next) {
      const data = context.data;
      const info = data.info;
      info.config = extend(true, info.config, {
        modules: {
          'a-dashboard': {
            dashboard: {
              presets: {
                anonymous: {
                  home: 'test-party:dashboardTest',
                },
                authenticated: {
                  home: 'test-party:dashboardTest',
                },
              },
            },
          },
        },
      });
      // next
      await next();
    }

  }

  return eventBean;
};
名称 说明
context.data 外部传入的参数
next event采用洋葱圈模型,调用next从而允许其他事件实现的执行
info.config 将自定义的config参数追加到info.configinfo数据将返回给前端,从而覆盖前端对应的config参数

注册Bean组件

前面定义的Bean组件需要在模块的beans.js中注册

src/module/test-party/backend/src/beans.js

const eventLoginInfoDashboard = require('./bean/event.loginInfoDashboard.js');

module.exports = app => {
  const beans = {
    // event
    'event.loginInfoDashboard': {
      mode: 'ctx',
      bean: eventLoginInfoDashboard,
    },
  };
  return beans;
};
注册名称 场景 所属模块 global beanFullName
loginInfoDashboard event test-party false test-party.event.loginInfoDashboard