zoukankan      html  css  js  c++  java
  • koa 基础(九) ejs 模板引擎的使用

    1.app.js

    /**
     * ejs 模板引擎的使用:
     * 1.npm install koa-views --save
     * 2.npm install ejs --save
     * 3.var views = require('koa-views');
     * app.use(views(__dirname, { extension: 'ejs' }))
     * 4.await ctx.render('index')
     * 
     * 注意:我们需要在每一个路由的render里面都要渲染一个公共的数据
     * 公共的数据放在这个里面,这样的话在模板的任何地方都可以使用
     * 
     * ctx.state = { // 放在中间件
     *   session: this.session,
     *   title: 'app'
     * }
     */
    // 引入模块
    const Koa = require('koa');
    const router = require('koa-router')(); /*引入是实例化路由 推荐*/
    const views = require('koa-views');
    
    // 实例化
    let app = new Koa();
    
    // 配置模板引擎中间件 -- 第三方中间件
    // app.use(views('views', {
    //   extension: 'ejs' /*应用ejs模板引擎 模板的后缀名是 .ejs*/
    // }))
    // 这样配置也可以 注意如果这样配置的话 模板的后缀名是 .html
    app.use(views('views', { map: { html: 'ejs' } }));
    
    // 写一个中间件配置公共的信息
    app.use(async (ctx, next) => {
      ctx.state.userInfo = '张三';
    
      await next(); /*继续向下匹配路由*/
    })
    
    router.get('/', async (ctx) => {
      let title = '你好 ejs';
      await ctx.render('index', {
        title: title
      })
    })
    
    router.get('/news', async (ctx) => {
      // ctx.body = '这是一个新闻';
      let list = ['111', '222', '333'];
    
      let content = "<h2>这是一个h2</h2>";
    
      let num = 123;
    
      await ctx.render('news', {
        list: list,
        content: content,
        num: num
      })
    })
    
    app.use(router.routes());
    app.use(router.allowedMethods());
    /**
     * router.allowedMethods() 作用:这是官方文档的推荐用法,我们可以
     * 看到 router.allowedMethods() 用在了路由匹配 router.routes()之后,
     * 所以在当所有路由中间件最后调用,此时根据 ctx.status 设置 response 响应头
     */
    
    app.listen(3000);

    2.views

    index.html

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <meta http-equiv="X-UA-Compatible" content="ie=edge">
      <title>Document</title>
    </head>
    
    <body>
      <% include public/header.html%>
        这是一个ejs的模板引擎
        <h2>
          <%=title%>------
            <%=userInfo%>
        </h2>
    </body>
    
    </html>
    

    news.html

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <meta http-equiv="X-UA-Compatible" content="ie=edge">
      <title>Document</title>
    </head>
    
    <body>
      <h2>ejs循环渲染数据 ------
        <%=userInfo%>
      </h2>
      <ul>
        <%for(var i=0;i<list.length; i++){%>
          <li>
            <%=list[i]%>
          </li>
          <%}%>
      </ul>
    
      <h2>绑定html数据</h2>
      <br />
      <%=content%>
        <br />
        <%-content%>
          <br />
          <h2>条件判断</h2>
          <%if(num > 24){%>
            大于24
            <%} else {%>
              小于24
              <%}%>
    </body>
    
    </html>
    

    header.html

    <h2 class="title">这是一个头部的模块</h2>

    .

  • 相关阅读:
    071:【Django数据库】ORM聚合函数详解-Avg
    实战:百度知道营销,自问自答技巧(下)
    实战:百度知道营销,自问自答技巧(上)
    QQ群排名霸屏技术居然是这样简单
    百度云盘,资源引流的温床,你绝对值得拥有!
    PC时代 常用搜索引擎高级指令 勿忘
    免费影视资源 日引不说几百上千 反正绝对不会是零
    QQ兴趣部落 大批量引流实战技巧
    新媒体运营之话说如此操作更容易出站街号。
    QQ群认证 人数再度扩容 权限随之升级
  • 原文地址:https://www.cnblogs.com/crazycode2/p/10865314.html
Copyright © 2011-2022 走看看