周大胖子 发表于 2019-1-25 23:20:34

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]
查看完整版本: ejs 全局渲染 与 假 静态