1.约定优于配置的思想理念
Elpis-core这个内核引擎的工作原理是从预先约定好的目录结构中读取各种js 文件,按照一定的顺序挂载到由koa 创建的app 实例上面,然后再启动服务监听各种请求。
Elpis-core 的结构:
config.js : 配置区分 本地/测试/生产环境,通过env环境读取不同文件配置 env.config,然后通过 env.config 覆盖 default.config 加载到 app.config 中。
controller.js、middleware.js 和 service.js 类似,都是遍历各自所有文件目录,把内容分别加载到 app.controller、app.middleware和 app.service 上。
router.js : 引入了一个KoaRouter,先把所有 app/router的文件加载到KoaRouter 下,再将路由注册到 app下。app.use(router.routes());app.use(router.allowedMethods());
router-schema.js : 通过 'json-schema & ajv' 对api 规则进行约束,配合 api-params-verify 中间件使用。
extend.js : 挂载 extend 到 app 上,这个extend可以用来引入日志工具。
index.js : 加载各种loader和启动node服务。
这样设计的优点是当项目变大时便于维护和拓展。
2. 洋葱圈模型与服务端渲染
一.洋葱圈模型:
Elpis-core引入了一个全局中间件,然后在全局中间件里面引入已经挂载到app.middleware上面的中间件。这样做就形成了一个洋葱圈模型。当一个请求过来时,会按照顺序经过每一个中间件:1.先经过异常捕获中间件,异常兜底,捕获 await next() 之后所有未处理的异常,增强代码的健壮性。2.然后再经过签名校验和参数校验中间件增强代码的安全性,减少爬虫请求数据。
二.服务端渲染:
Elpis-core在全局中间件引入了 koa-static 注册静态资源和 koa-nunjucks-2 注册模版引擎,为 Koa 应用集成 Nunjucks 模板引擎,实现后端动态渲染 HTML 页面的功能。通俗来讲就是使用ctx.render(‘/模版文件路径’,{//要渲染的数据}) 在controller中去渲染页面。但是要注意注册顺序,按照外层给内层提供上下文环境,controller要放到最内层:koaStatic->koaNunjucks->errorHandler->apiParamsVerify->apiSignVerify->controller
优点:服务端渲染能够加快首屏渲染速度。