中间件模版引擎

文章目录

  • 中间件
    • 1.自定义中间件
      • 1)全局
      • 2)局部中间件
    • 2.内置中间件(静态资源目录)
  • Art-template
    • 1.模板语法
      • 1)输出
      • 2)原文输出
      • 3)条件判断
      • 4)循环
      • 5)子模版
      • 6)模版继承
      • 7)模版配置
        • (1)向模版中导入变量
  • express和art-template搭配使用
    • 1.下载
    • 2.配置
    • 3.使用

中间件

内置中间件
自定义中间件(全局 局部)
第三方中间件

1.自定义中间件

1)全局

var express = require("express");
var app = express();// next 是否继续往下执行
app.use("/", function (req, res, next) {console.log("中间件");// next()
});// 如果是根路径/  即上面代码等价于
// app.use(function (req, res, next) {
//   console.log("中间件");
//   // next()
// });app.listen(3000, function () {console.log("server.start");
});
app.get("/test1", function (req, res) {console.log("test1");let { token } = req.query;if (token) {res.send("ok");} else {res.send("no");}
});
app.get("/test2", function (res, req) {console.log("test2");if (token) {res.send("ok");} else {res.send("no");}
});

在这里插入图片描述
在这里插入图片描述

当运行并发送请求时,被app.use拦截
因为中间件用的 /
/text1 /text2 中间件都具有这个符号
当发送请求时,会优先处理中间件的处理函数
如果中间件处理函数中有next() 会继续往下执行

2)局部中间件

var express = require("express");
var app = express();app.listen(3000, function () {console.log("server.start");
});app.get("/test1",function (req, res, next) {console.log("fun1");next();},function (req, res) {console.log("fun2");res.send("test1");}
);

2.内置中间件(静态资源目录)

指定一个目录(如hehe),可以被访问

在这里插入图片描述

__dirname可以获得代码所在文件的绝对路径E:\Nodejs\products,然后将目标目录相对于staitc.js的相对路径拼接拼接


//static.js
// 让hehe变为可访问
var express = require("express");
var app = express();
var path = require("path");
// console.log(__dirname);
// console.log(path.join(__dirname, "./hehe"));app.listen(3000, function () {console.log("server start");
});app.use(express.static(path.join(__dirname, "./hehe")));

如果app.use(‘/public’,express.static(path.join(__dirname, “./hehe”)));
在这里插入图片描述

Art-template

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

1.模板语法

1)输出

在这里插入图片描述

2)原文输出

如果数据中携带html标签,默认模板引擎不会解析标签,会将其转义后输出

在这里插入图片描述

3)条件判断

在这里插入图片描述
在模板中可以根据条件来决定显示哪块html代码

在这里插入图片描述

4)循环

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5)子模版

使用子模块可以将网站的公共区块(头部 底部)抽离到单独的文件中
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

6)模版继承

使用模版继承可以将网站HTML骨架抽离到单独的文件中,其他页面模板可以继承骨架文件
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7)模版配置

例如从数据库中获取发布文章的时间,这个时间是不能直接用的,需要对时间进行格式化
可以调用模版中的方法 dateformat
在这里插入图片描述

(1)向模版中导入变量

下载
在这里插入图片描述
使用
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
(2)设置模版根目录
避免代码的重复(反复声明views)
在这里插入图片描述

(3)配置模版的默认后缀
在这里插入图片描述

express和art-template搭配使用

1.下载

在这里插入图片描述

2.配置

html为文件后缀,可以替换为art

//1.告诉express 框架使用什么模板引擎  渲染什么后缀的文件
//第一个参数要渲染的文件后缀  第二个参数使用什么模板引擎去渲染
app.engine("html", require("express-art-template"));//2.告诉express模板文件存放的路径
app.set("views", path.join(__dirname, "views"));
app.set("view options", {debug: process.env.NODE_ENV !== "production",
});
//3.告诉express文件的默认后缀
app.set("view engine", "html");

3.使用

使用模版继承(上述方法)时,后端需要配置路径来跳页面,否则模版引擎不起作用

// 跳转页面
router.get("/getBookInfo", (req, res) => {res.render("/public/backstag-booke.html");
});

渲染数据,其中的数据返回给该页面,用模板引擎渲染

router.get("/getInfoOfBook", function (req, res) {let pageSize = req.query.pageSize || 10; //默认值为10let currentPage = req.query.currentPage || 1;Student.find().then(function (data) {let length = data.length;Student.find().limit(Number(pageSize)).skip(Number((currentPage - 1) * pageSize)).then(function (data) {res.render("backstage-book.html", {data: data,length,currentPage,pageSize,});});});});

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

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

相关文章

vue-Dialog 自定义title样式

展示结果 vue代码 <el-dialog :title"title" :visible.sync"classifyOpen" width"500px" :showClose"false" class"aboutDialog"> <el-form :model"classifyForm" :rules"classifyRules">…

【OJ】C++ | 二叉树进阶 · 合集(2)

摘要&#xff1a;根据二叉树创建字符串、二叉树的最近公共祖先、二叉树的层序遍历 前言&#xff1a;承接上文&#xff0c;本文继续提供二叉树进阶有关题目的解法。如有错误&#xff0c;烦请指正。 目录 1. 根据二叉树创建字符串 题解及代码 2. 二叉树的最近公共祖先 题解及…

Java | Leetcode Java题解之第121题买卖股票的最佳时机

题目&#xff1a; 题解&#xff1a; public class Solution {public int maxProfit(int prices[]) {int minprice Integer.MAX_VALUE;int maxprofit 0;for (int i 0; i < prices.length; i) {if (prices[i] < minprice) {minprice prices[i];} else if (prices[i] -…

用幻灯片讲解C++中的C语言风格数组

用幻灯片讲解C中的C语言风格数组 1.栈内存中的C风格数组 糟糕的可用性&#xff0c;但你将在遗留代码中看到它们。相同类型的对象块。大小必须是常量表达式。第一个元素的索引为0&#xff0c;即数组索引从0开始。 注意一下数组的初始化&#xff0c;使用了C11标准之后的统一初始…

【2024年5月备考新增】】 考前篇(26)《必备资料(9) - 论文串讲-范围管理》

过程定义输入工具技术输出实际应用规划范 围管理编制范围管理计划: 书面描述将如何定 义、制定确认项目 范围的过程,其主 要作用是在整个项 目中对如何管理范 围提供指南和方向1、项目章程2、项目管理计划.质量管理计划 3、事业环境因素 .项目生命周期描4、组织过程资产 述.开…

react ant design Upload 多文件上传 beforeUpload 会调用很多次,怎么只获取一次

当使用Ant Design的Upload组件实现多文件上传时&#xff0c;beforeUploadHandler函数会被每个选中的文件调用一次。如果您只想获取一次选中的文件而不是每个文件都触发一次处理逻辑&#xff0c;可以采取以下方法&#xff1a; 使用 useRef 钩子保存文件列表&#xff1a;可以使用…

Nginx监控与告警:确保服务稳定运行

在今天的网络世界中&#xff0c;Nginx已经成为许多网站和应用程序的首选反向代理和Web服务器。然而&#xff0c;随着流量的增长和复杂性的增加&#xff0c;确保Nginx服务的稳定运行变得至关重要。本文将探讨如何有效地监控Nginx&#xff0c;并设置告警机制&#xff0c;以便在潜…

cefpython3打包windows应用

序 最近使用cefpython3开发程序&#xff0c;网上找了一圈打包工具都没有效果&#xff0c;最后在github中翻到使用cx_Freeze进行打包。 代码 from distutils.sysconfig import get_python_lib from os.path import join from glob import glob from cx_Freeze import setup, …

数学建模--特殊的图

目录 1.二部图 &#xff08;1&#xff09;简单认识 &#xff08;2&#xff09;定义 &#xff08;3&#xff09;判定定理 &#xff08;4&#xff09;定理理解 2.匹配问题 &#xff08;1&#xff09;匹配 &#xff08;2&#xff09;完备&&完美匹配 &#xff08;3…

JTS库的讲解及使用

JTS&#xff08;Java Topology Suite&#xff09;是一套用于创建、操作和分析二维几何对象的Java库。JTS提供了丰富的几何操作和分析功能&#xff0c;是GIS&#xff08;地理信息系统&#xff09;应用中的重要工具。以下是JTS库的一些主要功能及其详细使用示例&#xff1a; 1. …

【Python】使用 Pandas 进行均值填充:处理缺失数据的实用指南

缘分让我们相遇乱世以外 命运却要我们危难中相爱 也许未来遥远在光年之外 我愿守候未知里为你等待 我没想到为了你我能疯狂到 山崩海啸没有你根本不想逃 我的大脑为了你已经疯狂到 脉搏心跳没有你根本不重要 &#x1f3b5; 邓紫棋《光年之外》 在数据分析…

Python 入门教程详细版全集(两周速成)

一、初始Python 打开CMD&#xff08;命令提示符&#xff09;程序&#xff0c;输入Python并回车。然后&#xff0c;在里面输入代码回车即可立即执行。 Tip1:找不到“命令提示符”程序在哪里&#xff1f; 使用快捷键&#xff1a;win r;打开运行框&#xff0c;输入cmd后回车即可…

点点点还有没有做下去的必要

大家好&#xff0c;我是洋子&#xff0c;最近工作特别忙&#xff0c;好久没更文章了 因为组织架构调整&#xff0c;原先的组长调离我所在已经3年多的业务线&#xff0c;我就承担起组长的角色了&#xff0c;除了日常跟进需求测试&#xff0c;还跟RD、跨业务线负责人开会&#x…

chat2-Client发送数据给Server

本文档描述了Client发送消息给Server&#xff0c; Server端打印接收的消息 一、Client 1.1.客户端的类Client.java中添加如下的start()方法 (表示启动客户端功能的方法)&#xff0c;并调用 /**start方法&#xff0c;作为客户端开始工作的方法*/ public void start(){ …

fastadmin 放服务器上后出现大量的502 亲身经历

fastadmin 放服务器上后出现大量的502 今天发生了一个特别无语的事情,那就是服务器上出现大量的502报错 因为之前一直都运行的好好的,突然今天就开始不间断的报502的错误,最开始我没有怀疑到服务器上,浪费了一天的时间进行排查! 因为域名挂在cf上,然后我又在cf上做了各种…

自然语言处理(NLP)—— 神经网络语言处理

1. 总体原则 1.1 深度神经网络&#xff08;Deep Neural Network&#xff09;的训练过程 下图展示了自然语言处理&#xff08;NLP&#xff09;领域内使用的深度神经网络&#xff08;Deep Neural Network&#xff09;的训练过程的简化图。 在神经网络的NLP领域&#xff1a; 语料…

深入解析Java中List和Map的多层嵌套与拆分

深入解析Java中List和Map的多层嵌套与拆分 深入解析Java中List和Map的多层嵌套与拆分技巧 &#x1f4dd;摘要引言正文内容什么是嵌套数据结构&#xff1f;例子&#xff1a; 遍历嵌套List和Map遍历嵌套List遍历嵌套Map 拆分嵌套数据结构拆分嵌套List拆分嵌套Map &#x1f914; Q…

PHP面向对象编程总结

PHP面向对象编程总结 学习PHP时&#xff0c;面向对象编程&#xff08;OOP&#xff09;往往是一个重要的里程碑。PHP的OOP功能提供了一种更加模块化、可扩展和易于维护的代码结构。在本文中&#xff0c;我们将深入探讨PHP面向对象编程的各个方面&#xff0c;包括类与对象、访问控…

【C#】委托和事件

目录 1.概念 2.自定义的委托 3.系统定义的委托 4.委托和事件的区别 1.概念 数组我们都知道是一组数据的容器&#xff0c;而委托很相似&#xff0c;不过它是一组函数的容器。 如果把调用一次函数看做释放一个技能&#xff0c;那调用一次委托则是释放一套技能连招 下面看看…