zoukankan      html  css  js  c++  java
  • 跟我一起了解koa(四)

    我们使用第二讲中的路由页面,再结合ejs,一起了解ejs在koa中的应用
    1.安装koa-views和ejs

    cnpm install --save koa
    cnpm install koa-router --save
    cnpm install --save koa-views
    cnpm install ejs --save
    

    在app.js中写入我们要渲染的值,并在模板引擎中引入

    //app.js
    var Koa =require('koa'),
        router=require('koa-router')(),
        views=require('koa-views');
    /*引入是实例化路由*/
    var app = new Koa()
    // 配置模板引擎第三方中间件
    // app.use(views('views', { map: {html: 'ejs' }}));   //这样配置也可以  注意如果这样配置的话 模板的后缀名是.html
    app.use(views('views',{
        extension:'ejs'
    }))
    router.get('/',async (ctx)=>{
        let title = "你好 ejs"
        await ctx.render("index",{
            title:title
        })
    })
    
    // router.get('/',async(ctx)=>{
    //     ctx.body = "首页"
    // })
    router.get('/news',async(ctx)=>{
        ctx.body = "新闻列表页面"
    })
    router.get('/newscontent',async (ctx)=>{
        ctx.body = "新闻详情"
    })
    app.use(router.routes());//启动路由
    app.use(router.allowedMethods())
    app.listen(3006)
    

    <!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>
        这是一个ejs模板引擎
        <h2><%=title%></h2>
    </body>
    </html>
    

    页面渲染效果为

    我们也可以在ejs中渲染一个数组
    代码如下【这些本质上是ejs的语法】

    //app.js
    var Koa =require('koa'),
        router=require('koa-router')(),
        views=require('koa-views');
    /*引入是实例化路由*/
    var app = new Koa()
    // 配置模板引擎第三方中间件
    // app.use(views('views', { map: {html: 'ejs' }}));   //这样配置也可以  注意如果这样配置的话 模板的后缀名是.html
    app.use(views('views',{
        extension:'ejs'
    }))
    router.get('/',async (ctx)=>{
        // let title = "你好 ejs"
        let arr = [11,3,5,6,7]
        await ctx.render("news",{
            list:arr
        })
    })
    
    // router.get('/',async(ctx)=>{
    //     ctx.body = "首页"
    // })
    router.get('/news',async(ctx)=>{
        ctx.body = "新闻列表页面"
    })
    router.get('/newscontent',async (ctx)=>{
        ctx.body = "新闻详情"
    })
    app.use(router.routes());//启动路由
    app.use(router.allowedMethods())
    app.listen(3006)
    
    //views
    ews.ejs
    <!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循环渲染数据</h2>
        <ul>
            <%for(var i=0;i<list.length;i++){%>
            <li><%=list[i]%></li>
            <%}%>
        </ul>
    </body>
    </html>
    

    页面渲染效果为

    在ejs中,我们同样可以引入公共的模块


    运行的效果为

    ejs中的if else函数


    效果如下

    如果我们需要在每一个路由中都渲染一个真实的数据,我们应该怎么做呢?

    //app.js
    var Koa =require('koa'),
        router=require('koa-router')(),
        views=require('koa-views');
        // 公共数据放在ctx.state中
    /*引入是实例化路由*/
    var app = new Koa()
    // 配置模板引擎第三方中间件
    // app.use(views('views', { map: {html: 'ejs' }}));   //这样配置也可以  注意如果这样配置的话 模板的后缀名是.html
    app.use(views('views',{
        extension:'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('/',async(ctx)=>{
    //     ctx.body = "首页"
    // })
    router.get('/news',async(ctx)=>{
        ctx.body = "新闻列表页面"
        let arr = [11,3,5,6,7]
        let content = "<h2>这是一个h2</h2>"
        let num = 12
        await ctx.render("news",{
            list:arr,
            content:content,
            num:num
        })
    })
    router.get('/newscontent',async (ctx)=>{
        ctx.body = "新闻详情"
    })
    app.use(router.routes());//启动路由
    app.use(router.allowedMethods())
    app.listen(3006)
    
    //news.js
    <!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.ejs%>
        <h2>ejs循环渲染数据<%=userinfo%></h2>
        <ul>
            <%for(var i=0;i<list.length;i++){%>
            <li><%=list[i]%></li>
            <%}%>
        </ul>
        <h2>绑定html数据</h2>
        <%=content%>
        <br>
        <%-content%>
        <h2>条件判断</h2>
        <br>
        <%if(num>24){%>
        大于24
        <%}else{%>
            小于24
        <%}%>
    </body>
    </html>
    
    //index.js
    <!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.ejs%>
        这是一个ejs模板引擎
        <h2><%=title%><%=userinfo%></h2>
    </body>
    </html>
    

    页面效果为

  • 相关阅读:
    4. Android框架和工具之 android-async-http
    3. Android框架和工具之 xUtils(BitmapUtils)
    自定义多列排序:C++/Java实现
    Java套接字
    Java泛型
    线程同步之生产者消费者
    面向对象之深复制与浅复制
    谈谈多线程
    递归与尾递归
    单例模式:Instance
  • 原文地址:https://www.cnblogs.com/smart-girl/p/11196570.html
Copyright © 2011-2022 走看看