nodejs模板引擎的使用

news2024/11/19 4:26:07

前后端不分离的情况(数据都来源于后端,前后端不可以分离使用)

npm i express art-template express-art-template --S
先下载模板引擎,模板渲染,还有experss服务器的包

js代码

//导入express服务器第三方的包
const express = require("express")
//导入模板引擎
const artTemple = require("express-art-template")
//导入node的fs文件系统的模块
const fs = require("fs")


//创建服务器实例
const app = express()

//注册模板引擎(告诉express框架使用什么模板引擎渲染什么后缀的文件)
//参数一:要渲染的文件名后缀
//参数二:使用什么模板引擎去渲染
//默认会渲染项目根目录下的views文件夹下的.html
app.engine("html", artTemple)
//当文件夹名不是views
//设置目录文件夹
app.set("views", "./xiaoji")//如果不需要修改,这行代码就省略

app.get("/", function (req, res) {
    res.render("index1.html", {
        title: "今日书籍打折",
        books: [
            {
                name: "三国演义", price: 50, disc: 30
            },
            {
                name: "水浒传", price: 60, disc: 48
            },
            {
                name: "西游记", price: 70, disc: 56
            },
            {
                name: "红楼梦", price: 50, disc: 30
            }
        ],
        arr: ["小红", "小明", "小翠"],
        age: 20,
        score: 89
    })
})

//调用listen启动服务器
app.listen(80, function () {
    console.log("开启了127.0.0.1服务器");
})

html代码

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <!-- art-template语法 -->
    <!-- {{title}} 渲染的值 -->
    <!-- {{}}可以是变量\属性\表达式-->
    <h1>{{title}}</h1>

    <!--循环渲染arr $value:循环元素$index:索引-->
    {{each arr}}
    <p>{{$value}}----{{$index}}</p>
    {{/each}}

    <!--自定义索引名 和 循环元素名 each 数组 元素名 索引名-->
    <div>
        {{each books a b}}
        <section>
            <p>{{a.name}}---{{b}}</p>
            <p>原价:{{a.price}}</p>
            <p>现价:{{a.disc}}</p>
        </section>
        {{/each}}
    </div>
    <p>{{1>3?"不大于":"大于"}}</p>

    <p>{{0||10}}</p>
    <p>{{5||10}}</p>

    <!-- if判断 -->
    {{if age<18}} 
    <p>未成年了</p>
    {{/if}}

    {{if age>=18}}
    <p>成年了</p>
    {{else}}
    <p>未成年</p>
    {{/if}}

    <!-- if-else if-else -->
    {{if score >=90}}
    <p>成绩:优</p>
    {{else if score>=60}}
    <p>成绩:良</p>
    {{else}}
    <p>成绩:不及格</p>
    {{/if}}
</body>
</html>
包结构

在这里插入图片描述

前后端分离模板的使用(前后端可以独立使用)

先获取模板的js文件,这里给大家提供
链接: https://pan.baidu.com/s/1ertUhroqoUL4Ek8ZN7LzgA?pwd=drck 提取码: drck

这里演示不用后台代码了,用一个get的api接口演示前端如何使用的模板(直接运行就可以看到效果)

html文件
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="">
    <!-- 引入jQuery -->
    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
    <style>
        .container{
            display: flex;
            width: 90vw;
            flex-wrap: wrap;
            margin: 0 auto;
        }
        section{
            flex-basis: 20%;
        }
        section img{
            width: 80%;
            display: block;
            margin: 0 auto;
        }
    </style>
</head>

<body>
    <div class="container"></div>
    <!-- 导入art-template模板 -->
    <script src="./template-web.js"></script>
    <!-- 使用script标签添加模板,类型定义text/html,这时候script就是个标签 -->
    <script type="text/html" id="goods">
        <h1>{{title}}</h1>
        <!-- 渲染响应数据 -->
        <!-- item index 分别代表元素本身和下标 -->
        {{each goods item index}}
            <section>
                <img src="{{item.img_list_url}}" alt="">
                <p>{{item.title}}</p>
                {{if item.price>50}}
                <h2>{{item.price}}</h2>
                {{else}}
                {{item.price}}
                {{/if}}
            </section>
        <!-- 记得给结尾标签 -->
        {{/each}}
    </script>

    <script>
        $.get("http://123.57.142.211:8080/api/goodList?page=1").done(function(data){
            console.log(data);
            //将数据与模板结合
            //参数一:模板id
            //参数二:数据
            let htmlStr=template("goods",{
                goods:data,
                title:"首页"
            });
            console.log(htmlStr);
            $(".container").html(htmlStr)
        })
    </script>
</body>

</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/72402.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring Cloud(十六):微服务分布式唯一ID

分布式唯一ID 特点方案 雪花算法 特点开源实现优缺点 替代方案 UUIDMongdbSeata数据库生成Redis 基于美团的 Leaf分布式 ID 微服务 Leaf-segment 数据库方案 双 buffer 优化 — TP999 数据波动大 Leaf 高可用容灾 — DB 可用性Leaf-snowflake 雪花方案 弱依赖 ZooKeeper 解决时…

加减大师-第10届蓝桥杯Scratch选拔赛真题精选

[导读]&#xff1a;超平老师计划推出Scratch蓝桥杯真题解析100讲&#xff0c;这是超平老师解读Scratch蓝桥真题系列的第98讲。 蓝桥杯选拔赛每一届都要举行4~5次&#xff0c;和省赛、国赛相比&#xff0c;题目要简单不少&#xff0c;再加上篇幅有限&#xff0c;因此我精挑细选…

Vue学习笔记--第一章(尚硅谷学习视频总结)

目录 一、第一章 Vue核心 1.1. Vue简介 1.1.1. 官网 1.1.2. 介绍与描述 1.1.3. Vue 的特点 1.1.4. 与其它 JS 框架的关联 1.1.5. Vue 周边库 1.2.初识Vue 1.3. 模板语法 1.4. 数据绑定 1.5 el与data的两种写法 1.6 MVVM模型 1.7 Vue中的数据代理 1.8.事件处理 1.…

从零学习 InfiniBand-network架构(九) —— IB协议中子网本地地址

从零学习 InfiniBand-network架构&#xff08;九&#xff09; —— IB协议中子网本地地址 &#x1f508;声明&#xff1a; &#x1f603;博主主页&#xff1a;王_嘻嘻的CSDN主页 &#x1f511;未经作者允许&#xff0c;禁止转载 &#x1f6a9;本专题部分内容源于《InfiniBand-n…

鸿蒙3.0应用开发若干问题及上架总结

1.如何去掉默认标题栏&#xff0c;实现全屏显示&#xff1f; 在config.json中的ability配置信息中添加属性&#xff1a; "abilities": [ {..."metaData": {"customizeData": [{"name": "hwc-theme","value": &q…

Buildroot系列开发(五)bootloader简述

参考&#xff1a;百问网 文章目录1.什么是Boot-loader?2.有哪些bootloader?哪些支持linux&#xff1f;3.Bootloader支持的Flash设备4.Bootloader支持的文件系统类型4.Bootloader支持的CPU架构5.Bootloader总结1.什么是Boot-loader? 2.有哪些bootloader?哪些支持linux&#…

广州蓝景分享——前端学习5 种在 JavaScript 中获取字符串第一个字符的方法

在本文中&#xff0c;我们将研究多种方法来轻松获取 JavaScript 中字符串的第一个字符。 1.charAt() 方法 要获取字符串的第一个字符&#xff0c;我们可以在字符串上调用 charAt() &#xff0c;将 0 作为参数传递。例如&#xff0c;str.charAt(0) 返回 str 的第一个字符。 c…

AT1106S(PHS/EN输入接口通道0.8A低压H桥直流刷式电机驱动IC)

描述 泛海微AT1106S为摄像机、消费类产品、玩具和其它低电压或者电池供电的运动控制类应用提供了一个集成的电机驱动器解决方案。泛海微AT1106S能够驱动一个直流电机或其他诸 如螺线管的器件。输出驱动模块由N MOS功率管构成的H桥组成&#xff0c;以驱动电机绕组。泛海微AT110…

车企接连押注「重感知」 ,高精地图真会被弃用?

实现高阶智能驾驶&#xff0c;“重感知”是否为大势所趋&#xff1f; 答案正日益明晰。 2022年&#xff0c;以特斯拉为代表的“重感知”阵营&#xff0c;押注者正日趋增多。以在2022年尝试落地城市NOA的三家厂商为例&#xff1a;毫末智行一早便属“重感知”阵营&#xff1b;小…

【20221208】【每日一题】目标和

给你一个整数数组 nums 和一个整数 target 。 向数组中的每个整数前添加 或 - &#xff0c;然后串联起所有整数&#xff0c;可以构造一个 表达式 &#xff1a; 例如&#xff0c;nums [2, 1] &#xff0c;可以在 2 之前添加 &#xff0c;在 1 之前添加 - &#xff0c;然后串…

5G无线技术基础自学系列 | SA移动性管理流程

素材来源&#xff1a;《5G无线网络规划与优化》 一边学习一边整理内容&#xff0c;并与大家分享&#xff0c;侵权即删&#xff0c;谢谢支持&#xff01; 附上汇总贴&#xff1a;5G无线技术基础自学系列 | 汇总_COCOgsta的博客-CSDN博客 SA移动性管理流程包括站内切换、Xn切换…

Java基础之序列化和反序列化

序列化的实现 java.io中的对象流提供了序列化和反序列化对象的方法 对象输出流 ObjectOutputStream 构造方法&#xff1a; ObjectOutputStream(OutputStream out) 保存对象的方法&#xff1a; void writeObject(Object obj) 对象输入流 ObjectInputStream 构造方法&…

使用 MySQL、Thymeleaf 和 Spring Boot Framework 上传、存储和查看图像

在本文中&#xff0c;我们将使用 Spring Boot 框架从头开始构建映像库应用程序&#xff0c;用户可以在其中列出其映像。 以下是我们将在应用程序中实现的功能。 用户可以列出他们的图像以及详细信息&#xff0c;例如&#xff0c; 名字描述图像价格。&#xff08;如果他们想卖…

Win11 启用旧右键菜单 _ Windows11 右键改回老版

Win11 系统在使用上和之前的系统差不多&#xff0c;但是在设计上&#xff0c;有了很大的改变&#xff0c;系统界面&#xff0c;设置等功能都使用了全新的风格&#xff0c;包括右键菜单&#xff0c;这让很多用户使用起来都很不习惯&#xff0c;因此想改回旧版的右键菜单来使用。…

汽车控制器概述

目录 一、整车控制器&#xff08;VCU&#xff09; 功能 工作模式 二、发动机控制器/电子控制单元&#xff08;ECU&#xff09; ECU基本组成 ECU的作用 ECU的工作原理 常见的ECU的类型 三、电机控制器&#xff08;MCU&#xff09; 四、 电池管理系统&#xff08;BMS&a…

cubeIDE开发, stm32的USB从设备串口驱动设计

一、USB_OTG简介 USB_OTG&#xff08;OTG&#xff0c;ON THE GO&#xff09;是一款双角色设备(DRD) 控制器&#xff0c;同时支持从机&#xff08;USB DEVICE&#xff09;功能和主机&#xff08;USB HOST&#xff09;功能。在主机模式下&#xff0c;OTG 支持全速&#xff08;OTG…

2022圣诞在即,出海品牌如何做好网红营销?

随着2022圣诞节逐渐临近&#xff0c;节日气氛也开始浓郁起来&#xff0c;尤其在社交媒体上&#xff0c;圣诞主题的内容越来越多&#xff0c;随之而来的则是各种营销与折扣。受经济形势影响&#xff0c;性价比在当下显得尤为重要&#xff0c;有60%的消费者表示&#xff0c;今年圣…

【能效分析】安科瑞变电所运维云平台解决方案应用分析

概述 安科瑞 李亚俊 壹捌柒贰壹零玖捌柒伍柒 AcrelCloud-1000变电所运维云平台基于互联网&#xff0b;大数据、移动通讯等技术开发的云端管理平台&#xff0c;满足用户或运维公司监测众多变电所回路运行状态和参数、室内环境温湿度、电缆及母线运行温度、现场设备或环境视频场…

CentOS MySQL安装

1.查询是否已经存在mariadb。 rpm -qa|grep mariadb如果存在需要卸载。 rpm -e --nodeps mariadb-libs-5.5.68-1.el7.x86_642.通过xftp上传MySQL和Hive压缩包。 3.解压压缩包。 tar -zxvf apache-hive-2.3.4-bin.tar.gz -C /opt/apps/ tar -zxvf mysql-5.7.27-el7-x86_64.ta…

042-推箱子游戏源代码2

上一讲:041-推箱子游戏1_CSDN专家-赖老师(软件之家)的博客-CSDN博客 摘要: 1、使用JAVA基础知识 2、GUI界面编程实现推箱子界面,常用控件的综合应用; 3、使用JAVA绘图技术实现推箱子过程的绘图功能; 4、使用键盘事件,通过方向键实现推箱子过程; 5、使用音频技术,…