nodeJS ejs模板引擎 片段视图+视图助手

2023-10-30

 Express 的视图系统还支持片段视图(partials),它就是一个页面的片段,通常是重复的
内容,用于迭代显示。通过它你可以将相对独立的页面块分割出去,而且可以避免显式地使
用 for 循环。让我们看一个例子,在 app.js 中新增以下内容:

app.get('/list', function(req, res) {
res.render('list', {
title: 'List',
items: [1992, 'fangchao', 'express', 'Node.js']
});
});

在 views 目录下新建 list.ejs,内容是:

<ul><%- partial('listitem', items) %></ul>

同时新建 listitem.ejs,内容是:

<li><%= listitem %></li>

访问 http://localhost:3000/list,可以在源代码中看到以下内容:

<html>
<head>
<title>List</title>
<link rel='stylesheet' href='/stylesheets/style.css' />
</head>
<body>
<ul><li>1991</li><li>fangchao</li><li>express</li><li>Node.js</li></ul>
</body>
</html>

效果如下:


List


  • 1992
  • fangchao
  • express
  • Node.js


  partial 是一个可以在视图中使用函数,它接受两个参数,第一个是片段视图的名称,
第二个可以是一个对象或一个数组,如果是一个对象,那么片段视图中上下文变量引用的就
是这个对象;如果是一个数组,那么其中每个元素依次被迭代应用到片段视图。片段视图中
上下文变量名就是视图文件名,例如上面的’listitem’

视图助手
  Express 提供了一种叫做视图助手的工具,它的功能是允许在视图中访问一个全局的函数
或对象,不用每次调用视图解析的时候单独传入。前面提到的 partial 就是一个视图助手。
视图助手有两类,分别是静态视图助手和动态视图助手。这两者的差别在于,静态视图
助手可以是任何类型的对象,包括接受任意参数的函数,但访问到的对象必须是与用户请求无
关的,而动态视图助手只能是一个函数,这个函数不能接受参数,但可以访问 req 和 res 对象。
  静态视图助手可以通过 app.helpers() 函数注册,它接受一个对象,对象的每个属性名
称为视图助手的名称,属性值对应视图助手的值。动态视图助手则通过 app.dynamicHelpers()
注册,方法与静态视图助手相同,但每个属性的值必须为一个函数,该函数提供 req 和 res,
参见下面这个示例:

var util = require('util');
app.helpers({
inspect: function(obj) {
return util.inspect(obj, true);
}
});
app.dynamicHelpers({
headers: function(req, res) {
return req.headers;
}
});
app.get('/helper', function(req, res) {
res.render('helper', {
title: 'Helpers'
});
});

对应的视图helper、 ejs的内容如下:

<%=inspect(headers)%>

访问 http://localhost:3000/helper 结果如下图:
这里写图片描述
视图助手的本质其实就是给所有视图注册了全局变量,因此无需每次在调用模板引擎时
传递数据对象。当我们在后面使用 session 时会发现它是非常有用的

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

nodeJS ejs模板引擎 片段视图+视图助手 的相关文章

  • AWS Lambda 提前结束(没有任何显式返回或回调)

    我在放入 AWS Lambda 中的一些 Node js 代码时遇到了一些问题 我需要进行几个异步调用 虽然第一个调用的行为符合我的预期 但 lambda 函数在第二个调用完成之前终止 返回值为 null 这让我认为 lambda 正在执行
  • NodeJs读取JSON文件

    我正在使用 NodeJs 读取 json 文件 我的代码非常基本 var obj require sample json console log obj 0 Sample json 文件包含这样的字符串化 JSON sample good
  • npm 错误! cb.apply 不是函数

    我收到这个错误 npm ERR cb apply is not a function 在Linux中做的时候npm install虽然我的npm版本是6 9 0 我的节点版本是v12 18 3 如何解决这个问题 如果您共享的是 Window
  • 无法使用 webpack 加载 Node 原生插件

    虽然我正在使用vue cli在生成 webpack 配置的示例代码中 没有任何特定于 vue 的内容 我像这样创建示例应用程序 vue init webpack webpack modules example 生成webpack base
  • 了解使用 Windows 本机 WPF 客户端进行 ADFS 登录

    我已经阅读了大量有关 ADFS 与 NodeJS Angular 或其他前端 Web 框架集成以及一般流程如何工作的文献 并通过 Auth0 Angular 起始代码构建了概念证明 但我不明白如何这可以与本机 WPF Windows 应用程
  • 如何从@google-cloud/storage读取文件?

    我正在从我的存储桶中检索文件 我收到该文件并想要阅读其内容 但我不想将其下载到我的本地项目 我只想读取内容 获取数据并用它进行其他操作 我的代码 export const fileManager async gt try const sou
  • Node.js Express 4.0 中的 res.render 回调参数的用途是什么?

    目的是什么res render回调参数 在什么情况下 由于模板已被指定为第一个参数 因此人们会想要使用这样的回调参数 这是文档中的代码 send the rendered view to the client res render inde
  • 警告:访问循环依赖内模块导出的不存在属性“MongoError”

    我正在使用节点执行 API 并使用 Mongoose 当我给一个yarn dev启动我的 Nodemon Mongo 出现错误 我不知道如何解决这个问题 有人有什么想法吗 我使用的是 MongoDB Atlas 数据库 就在出现以下错误之后
  • 如何将对象数组传递给jade模板?

    我想将一组对象从 mongodb 传递到客户端 这是物体 var objeto img name name of the file image image jpg url title title of the image caption d
  • 未捕获的 ReferenceError:未定义角度 - Mean.IO

    我已遵循安装步骤 http mean io docsmean io 但是当我浏览 localhost 3000 时 我得到一个空白页面 当我打开控制台时 我得到一个指向相同错误的文件列表 未捕获的引用错误 角度未定义 我的问题是类似的to
  • React-Native 打包器失败:模块名称重复

    这在开发过程中似乎是随机发生的 当尝试跑步时npm start or react native run ios 我收到以下错误 Failed to build DependencyGraph providesModule naming co
  • GraphQL 预期可迭代,但未找到字段 xxx.yyy 的迭代

    我目前正在尝试使用 NodeJS 进行 GraphQL 但我不知道为什么以下查询会出现此错误 library name user name email 我不确定是否type of my resolveLibrary是对的 因为在任何例子中我
  • 如何导入和导出 javascript ES6 类

    我是 javascript 和 nodejs 的新手 我正在使用这个项目来发展我的技能并学习新技术 目前我的项目使用多个相互依赖的类 类文件位于不同的目录中 我当前正在尝试使用 export 和 require 语句来允许在其他文件中引用类
  • 当尝试将 formData 发送到 Express js 时,服务器无法识别 multipart/form-data

    我正在尝试将表单数据上传到快递服务器 在我的 Express js 服务器上 我有以下内容 router post uploads id function req res res send req body const title req
  • 嵌套异步/等待 Nodejs

    似乎无法弄清楚为什么这对我不起作用 我有一个父函数 它对子加载进程执行 AWAIT LOAD 进程又调用另一个名为 LOADDATA 的 AWAIT 所以基本上是这样的 module exports async function try a
  • 一次更新猫鼬中的多个文档

    我有一个用户文档数组 每个用户都有关注者属性 它是一个数字 我只想将此属性增加 1 然后立即更新数据库中的所有这些用户文档 更多细节 在请求中 我有一组用户 id 我使用这些 id 进行查询以获取一组用户文档 const users awa
  • Docker - SequelizeConnectionRefusedError:连接 ECONNREFUSED 127.0.0.1:3306

    我正在尝试使用 Docker 容器启动并运行我的 Nodejs 应用程序 我不知道可能出了什么问题 当我使用控制台调试凭据时 凭据似乎已正确传递 另外启动sequel pro并使用相同的用户名和密码直接连接似乎也可行 当节点在容器中启动时
  • MongoDB中如何通过引用字段进行查询?

    我有两个 Mongo 模式 User id ObjectId name String country ObjectId Reference to schema Country Country id ObjectId name String
  • Node.js - 重载函数

    有没有一种方法可以重载node js中的函数 类似于 noSuchMethod https developer mozilla org en JavaScript Reference Global Objects Object noSuch
  • 如何执行“sudo nvm”?

    在我的 Mac 上 我想将一些需要 su 权限的包迁移到另一个节点版本 我使用 homebrew 安装 nvm 现在我需要执行 sudo nvm 或 reinstall packages将失败 me MacBook sudo nvm sud

随机推荐

  • 低通采样定理与带通采样定理

    一 低通 采样定理 如何从抽样信号中恢复原连续信号 在什么条件下才可以无失真地由采样信号恢复原连续信号 著名的采样定理对此作了明确的回答 采样定理在通信系统 信息传输理论 数字信号处理等方面占有十分重要的地位 该定理在连续时间信号与系统和离
  • 扫雷的c语言代码

    输入一个数 确保判断的组数 然后用 代表雷 代表非雷区 从而输出雷区与非雷区的数字 曾经借鉴过某位大佬c 的算法https www cnblogs com J william p 6041413 html include
  • thread ‘main‘ panicked at ‘called `Result::unwrap()` on an `Err` value: Os { code: 2, kind: NotFound

    thread main panicked at called Result unwrap on an Err value Os code 2 kind NotFound message 系统找不到指定的文件 src main rs 31 5
  • 大数据课程I4——Kafka的零拷贝技术

    文章作者邮箱 yugongshiye sina cn 地址 广东惠州 本章节目的 掌握Kafka的零拷贝技术 了解常规的文件传输过程 一 常规的网络传输原理 表面上一个很简单的网络文件输出的过程 在OS底层 会发现数据会被拷贝4次 内核态可
  • 苏移笔试

    1 Linux查看一个目录下文件占用多少空间 du sh path 我们有个系统每天要下载数据 为了检查下载数据是否正常 需要查看下载数据目录大小 因为每天的数据都差不多 如果变化太大就说明不正常 查看目录大小的命令是du 当然也可以查看文
  • n行Python代码系列专栏文章目录

    前往老猿Python博客 https blog csdn net LaoYuanPython 一 专栏简介 本专栏介绍使用少量Python代码 n行 n小于等于10 实现特定的功能或能力 并介绍其背后支撑相关的模块和函数 主要用于介绍Pyt
  • 【游戏引擎】win7配置安装firefly【草稿尝试篇】

    firefly是python的开源服务端游戏引擎 而且它使用了不少软件 数据库mysql 缓存memcached等等 配置firefly其实就是配置完整的一个服务器环境 python2 7安装 安装python2 7 mysql memca
  • 感谢Python

    2012 12 20 不得不说 要不是读了Thinking in Java 要不是受不了作者的的唠叨 不停的推荐Python 我目前所学习到的一切也都无从说起了 感谢Python 到目前为止 Python依然是我的最爱 写代码起来最实用 S
  • 会话技术 Cookie +jsp(实现上次登录时间功能)

    会话技术 1 会话 一次会话中包含多次请求和响应 一次会话 浏览器第一次给服务器资源发送请求 会话建立 直到有一方断开为止 2 功能 在一次会话的范围内的多次请求间 共享数据 3 方式 1 客户端会话技术 Cookie 2 服务器端会话技术
  • 什么是煤矿智能化综采工作面?

    转载 https zhuanlan zhihu com p 354323715 什么是煤矿智能化综采工作面 2021年对于煤矿产业是关键性一年 从国家到集团公司对于煤矿的智能化建设都提出了要求 将人工智能 5G通信 大数据技术引入 基本实现
  • stm32编码器接口测速

    本文章转自B站江科大自化协 目录结构 Encoder c include stm32f10x h Device header void Encoder Init void 第一步开启RCC时钟 开启GPIO和定时器的时钟 RCC APB1P
  • c#窗体程序添加图标详细教程

    一 为什么要给窗体程序添加图标 俗话说 人靠衣装 马靠鞍 一个有个性的窗体程序 不能总是使用微软自带的默认图标 而给程序添加一个自己喜欢的图标 不仅彰显水平 还会增加用户的使用体验 所以 窗体程序加入合适的图标值得程序员的学习 下面就开始教
  • 计算机视觉 图像检索与识别

    目录 一 图像检索相关介绍 1 起因 2 参数介绍 图像纹理 词序无关的文本表述 图像分类 图像特征词典 图像整体描述子 二 图像分类 检索具体内容 图像分类 检索 单词的TF IDF权重 倒排表 Inverted file 图像检索流程
  • QT 添加资源文件

    转自 https blog csdn net dianzishi123 article details 86475565 鼠标点击工程文件目录右键选择 添加新文件 在模板中选择 Qt gt Qt Resource File 资源名称 不要有
  • Shell 基础知识

    Shell 基础知识 number 传递的参数 test sh myvalue1 myvalue2 1是第一个参数 2是第二个参数 echo first 1 second is 2 上一条命令 上一条命令的最后一个参数 Ctrl R 历史搜
  • 无人系统群体智能及其研究进展

    来源 无人机 作者 周兴社 武文亮 西北工业大学 计算机学院 陕西 西安 710129 摘 要 群体智能是人工智能的重要发展方向之一 无人系统群体智能作为人工群体智能的主要形态之一 在许多军用和民用领域都具有广阔且重要的应用前景 同时在基础
  • 服务网格实施周期缩短 50%,丽迅物流基于阿里云 ACK 和 ASM 的云原生应用管理实践

    作者 王夕宁 刘强 华相 公司介绍 丽迅物流是百丽旗下专注于时尚产业 为企业提供专业物流及供应链解决方案的服务商 其产品服务主要包括城市落地配 仓配一体 干线运输及定制化解决方案 通过自研智能化物流管理平台 全面助力企业合作集约化发展 目前
  • Ext_面板_Ext.Panel .

    javascript view plain copy print Ext Panel主要配置表 animCollapse Boolean 设置面板折叠展开是否显示动画 Ext Fx可用默认true 否则false applyTo Mixed
  • orm框架有哪些_Java架构—Spring 核心框架体系结构

    很多人都在用spring开发java项目 但是配置maven依赖的时候并不能明确要配置哪些spring的jar 经常是胡乱添加一堆 编译或运行报错就继续配置jar依赖 导致spring依赖混乱 甚至下一次创建相同类型的工程时也不知道要配置哪
  • nodeJS ejs模板引擎 片段视图+视图助手

    Express 的视图系统还支持片段视图 partials 它就是一个页面的片段 通常是重复的 内容 用于迭代显示 通过它你可以将相对独立的页面块分割出去 而且可以避免显式地使 用 for 循环 让我们看一个例子 在 app js 中新增以