[NodeJS] Express 模板传值对象app.locals、res.locals

[NodeJS] Express 模板传值对象app.locals、res.localslocals 是 Express 应用中 Application app 对象和 Response res 对象中的属性 该属性是一个对象 该对象的主要作用是 将值传递到所渲染的模板中 locals 对象 locals 对象用于将数据传递至所渲染的模板中 对于如下一个 ejs 模板 DOCTYPEhtmlh name title h

locals是Express应用中 Application(app)对象和Response(res)对象中的属性,该属性是一个对象。该对象的主要作用是,将值传递到所渲染的模板中。

locals对象

locals对象用于将数据传递至所渲染的模板中。

对于如下一个ejs模板:

 <html> <head> <title><%= name %> 
   title>  
   head> <body> <h1><a href="<%= url %>"><%= name %> 
   a> 
   h1> <p><%= introduce %> 
   p>  
   body>  
   html>

我们可以像下面这样渲染页面,并向页面传递nameurlintroduce三个变量的值:

router.get('/', function(req, res) { 
    res.render('index', {name:'IT笔录', url:'http://itbilu.com', introduce:'学习、记录、整理'}); // 也可以使用 res.locals 变量 // res.locals = { 
    // name:'IT笔录',  // url:'http://itbilu.com',  // introduce:'学习、记录、整理' // }; // res.render('index'); });

渲染后的页面HTML:

 <html> <head> <title><IT笔录> 
   title>  
   head> <body> <h1><a href="http://itbilu.com">IT笔录 
   a> 
   h1> <p>学习、记录、整理 
   p>  
   body>  
   html>

locals对象会被传递到页面,在模板中可以直接引用该对象的属性,也可以通过该对象引用。如:<%= name %>属性同样可以通过<%= locals.name %>来引用。

app.localsres.locals

locals可能存在于app对象中即:app.locals;也可能存在于res对象中,即:res.locals。两者都会将该对象传递至所渲染的页面中。不同的是,app.locals会在整个生命周期中起作用;而res.locals只会有当前请求中起作用。由于app.locals在当前应用所有的渲染模中访问,这样我们就可以在该对象中定义一些顶级/全局的数据,并在渲染模板中使用。

在中间件中使用

我们常利用Expres的中间件将复杂的问题拆解成多个简单的问题,实现复杂的问题简单化。locals对象中样也可以应用中间件路由中间件中引用,该对象和appreqres一样可以依次传递,添加或修改其属性值后,会在后面的处理中体现出来。

如,在app中使用locals

var app = express(); app.locals.name = '这是一个APP'; // 定义可以应用整个生命周期中使用的变量 app.use(function(req, res, next) { 
    app.locals.name = '新名称'; // 修改 res.locals.url = 'http://itbilu.com' next(err); });

在路由中间件中使用locals

router.get('/', urlAndIntroduce, function(req, res) { 
    res.render('index', {name:'IT笔录'}); }); function urlAndIntroduce(req, res, next) { 
    res.locals = { url:'http://itbilu.com', introduce:'学习、记录、整理'}; }

附加

jade 中使用 moment、marked 等插件

app.js 中加上

app.locals.moment = require('moment'); app.locals.marked = require('marked');

index.jade就可以这样使用了

p #{ 
  moment(time).format('LLLL')} .markdown-body != marked(content)

转载自: Express 模板传值对象app.locals、res.locals —— http://itbilu.com/nodejs/npm/Ny0k0TKP-.html 稍作修改

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/208538.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 上午11:21
下一篇 2026年3月19日 上午11:21


相关推荐

  • 零基础也能用AI免费写代码?Trae让编程不再是程序员的专利

    零基础也能用AI免费写代码?Trae让编程不再是程序员的专利

    2026年3月14日
    2
  • python怎么定义数组长度_python中如何定义数组

    python怎么定义数组长度_python中如何定义数组广告关闭腾讯云11.11云上盛惠,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元!python返回数组(list)长度的方法array=printlen(array)…如何查找二维数组中有多少行和列?例如,input=(,,])`应显示为3行和2列…所以我在python中实现了一个块交换算法。我遵循的算法是这样的:初始化a=arr…

    2022年8月13日
    23
  • 台式计算机网线,台式电脑如何连接宽带_台式电脑如何连接网线

    台式计算机网线,台式电脑如何连接宽带_台式电脑如何连接网线2017-03-1121:36:28电脑直接拨号上网(有宽带账号和密码)或者自动获取IP(有帐号没密码)上方式设置见图2016-12-1013:29:30右击网上邻居,点属性,创建一个新的连接,按照下一步下一步的步骤就可以了,然后成功之后输入你的宽带号码和密码就可以了,如果你使用的是ASDL拨号的,你可以下一个宽带我世界,电信的话你…2016-12-2917:28:19方法如下1、第一,…

    2022年6月26日
    34
  • .py和.ipynb的小知识

    .py和.ipynb的小知识目录1.相同点2.区别3.转换4.类比1.相同点用Python语言编写的源代码文件,其文件后缀是“.py”或“.ipynb”。用Python语言编写的源代码文件,其文件后缀是“.py”或“.ipynb”。2.区别.py:".py"文件是标准的Python源代码文件,通常情况下,使用“.py”的python源代码文件。可以用Spyder编辑并运行.py文件。也可…

    2025年8月10日
    5
  • 解决Eclipse中Preferences下没有Maven选项

    解决Eclipse中Preferences下没有Maven选项情景:      朋友学习Maven时,告诉我他的Preferences下面没有Maven选项,如下图。     既然我问,那我就得搞出来。教程:       Help—&gt;install New software—&gt;work with 中输入:http://download.eclipse.org/releases/indigo          红色部…

    2022年6月13日
    57
  • 虚拟机怎么退出vi编辑模式_手机系统占用30个g正常吗

    虚拟机怎么退出vi编辑模式_手机系统占用30个g正常吗ESC键->冒号->小写q->(可选:不保存退出加个惊叹号!)->(可选:如文件需保存加个小写w)  当编辑完文件,准备退出Vi返回到shell时,可以使用以下几种方法之一。   (1)在命令模式中,连按两次大写字母Z,若当前编辑的文件曾被修改过,则Vi保存该文件后退出,返回到shell;若当前编辑的文件没被修改过,则Vi直接退出,返回到shel

    2022年9月30日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号