应用场景

我们知道EggJS通过插件egg-static可以在后端提供静态资源(如js、css、image等)供前端访问。与EggJS不同的是,EggBornJS采用模块化体系,每个业务模块可以提供自己的静态资源,然后由系统统一向前端提供访问服务

模块静态资源的存放路径

EggBornJS约定了业务模块中静态资源的存放路径:{module path}/backend/static,比如模块a-base提供了一个缺省的avatar图标,其路径为:src/module-system/a-base-sync/backend/static/img/avatar_user.png

如何访问模块的静态资源

同样,EggBornJS也约定了业务模块中静态资源的访问路径:{domain}/api/static/{module path}/{static path},比如上面的avatar图标,其访问路径就是:https://test.cabloy.com/api/static/a/base/img/avatar_user.png

名称 说明
domain https://test.cabloy.com
静态资源前缀 /api/static
模块路径 /a/base/
静态资源 img/avatar_user.png

API

为了方便构造静态资源的访问路径,在前端和后端均提供了辅助方法:

1. 前端

通过this.$meta.util.combineStaticPath构造,如:

src/suite-vendor/test-party/modules/test-party/front/src/kitchen-sink/pages/markdownEditor.vue

  1. 1this.$meta.util.combineStaticPath('a-base', 'img/avatar_user.png')

2. 后端

通过ctx.bean.base.getStaticUrl构造,如:

src/module-system/a-dingtalk/backend/src/service/contacts.js

  1. 1const msg = {
  2. 2 msgtype: 'link',
  3. 3 link: {
  4. 4 messageUrl: this.ctx.bean.base.getAbsoluteUrl('/#!/a/login/migrate'),
  5. 5 picUrl: this.ctx.bean.base.getStaticUrl('/a/base/img/cabloy.png'),
  6. 6 title: this.ctx.text('AccountMigration'),
  7. 7 text: this.ctx.text('AccountMigrationDesp'),
  8. 8 },
  9. 9};