使用 Egg.js 做店铺装修 BFF 层

date
Sep 9, 2021
slug
use-eggjs-create-bff
status
Published
tags
Nodejs
Egg.js
跨境电商
summary
主要从架构的角度考虑搭建项目时需要注意的问题以及整个流程
type
Post

需要考虑的问题

  1. 路由
  1. cookie
  1. session
  1. 表单、登陆、表单csrf安全等
  1. 缓存
  1. 多线程(数据共享)
  1. http全链路标识
  1. log
  1. database&cdn

入口(app/agent)

  1. tplconfig更新通过app、agent俩个线程(egg)提供,通信即可。agent订阅redis缓存的更新服务,记得在引入redis的config中开启agent: true,一旦agent接收到更新就发送消息给主进程 app
  1. 利用app中的beforeStart钩子来初始化全局变量:tplConfig/tcuptime

config

可以进行相应的配置,如果想自定义变量并导出可以参见 confid.default.js 中的 apiConfig

middleware

  1. auth 鉴权
  1. common 放置一些全局变量区别与全局的app变量,middleware只是在有路变化时载入,这里放置siteid以及全链路的requestid(检测、debug),每次都去拉 tplconfig 并且把该变量放入 app.locals中(在appjs中初始化,在这里赋值)

extend

  1. 直接在对应的全局对象上进行扩展方便逻辑编写,比如:在context上重写了模版的render方法,为了动态加载主题的名称 this.getTplConfig().name 可以获取当前是 default 主题还是其他主题;添加了获取 tplconfig 的方法
  1. helper中都是辅助方法

error

重写了egg的错误提示方法,把错误信息和自定义code都打印出来

提示

tplconfig的更新:
  1. 订阅redis更新 app.js&agent.js
  1. 主动从oss拉取 service/base.js => fetchTplConfig => this.ctx.oss.get
  1. 主动通过接口拉 service/base.js => fetchTplConfig => apisdk siteId的设置:在middleware/common => ctx.request.siteId = siteId;

© i7eo 2017 - 2022