ejs 全局渲染 与 假 静态
先说说, 如何在全局缓存 ejs 要渲染的内容吧: 网上一共有两种第一种
app.use(async (ctx,next) =>{
ctx.state={
userinfo:'张三'
}
await next()
})
这样所有的模板都可以使用 <%= userinfo %>
参考地址:https://www.jianshu.com/p/31bdea860a4c
第二种 【推荐】
//配置中间件 获取url的地址
router.use(async (ctx,next)=>{
//console.log(ctx.request.header.host);
var pathname=url.parse(ctx.request.url).pathname;
//导航条的数据
var navResult=await DB.find('nav',{$or:[{'status':1},{'status':'1'}]},{},{
sortJson:{'sort':1}
})
//模板引擎配置全局的变量
ctx.state.nav=navResult;
ctx.state.pathname=pathname;
awaitnext()
})
参考链接:https://www.itying.com/koa/article-index-id-95.html
总得来说, 都是一样的在app.js 文件中,添加一个全局模板的中间件, 然后利用ctx.state.名= 值 ; 来渲染全局变量;我最终的写法是 :
// //配置中间件 获取url的地址 配置导航条内容
app.use(async (ctx,next)=>{
//模板引擎配置全局的变量
ctx.state.t = await laomo.getAllBusiness();
await next();
})
=================== 假静态====================================
先说明一下: 为什么我要把假静态 放在全局ejs 渲染这一起说, 因为 假静态 我一般都存在全局。 在哪都能渲染
思路:
走一个 静态页面缓存的逻辑[假的] 先搞一个全局json
1. 请求业务时, 发送静态请求 至 对应路由;
2. 路由去读取,一个公共的 json['b'+id] 看是否存在,
2.1 如果存在,就去读取这条值
2.2 如果不存在,就去数据库中 读取该值,并存入到 该json 中
2.3 这样就等于是实现了 缓存了
2.4 如果后台更新, 搞个清除缓存的按钮, 点击后 重置前台的这个json 为 {} 则 ,实现了清除缓存
页:
[1]