89.[NodeJS] Express 模板传值对象app.locals、res.locals
转自:https://blog.csdn.net/Elliott_Yoho/article/details/53537437
locals是Express应用中 Application(app)对象和Response(res)对象中的属性,该属性是一个对象。该对象的主要作用是,将值传递到所渲染的模板中。
locals对象
locals对象用于将数据传递至所渲染的模板中。
对于如下一个ejs模板:
<!DOCTYPE html>
<html>
<head>
<title><%= name %></title>
</head>
<body>
<h1><a href="<%= url %>"><%= name %></a></h1>
<p><%= introduce %></p>
</body>
</html>
我们可以像下面这样渲染页面,并向页面传递name、url、introduce三个变量的值:
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:
<!DOCTYPE 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.locals与res.locals
locals可能存在于app对象中即:app.locals;也可能存在于res对象中,即:res.locals。两者都会将该对象传递至所渲染的页面中。不同的是,app.locals会在整个生命周期中起作用;而res.locals只会有当前请求中起作用。由于app.locals在当前应用所有的渲染模中访问,这样我们就可以在该对象中定义一些顶级/全局的数据,并在渲染模板中使用。
在中间件中使用
我们常利用Expres的中间件将复杂的问题拆解成多个简单的问题,实现复杂的问题简单化。locals对象中样也可以应用中间件或路由中间件中引用,该对象和app、req、res一样可以依次传递,添加或修改其属性值后,会在后面的处理中体现出来。
如,在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)
89.[NodeJS] Express 模板传值对象app.locals、res.locals的更多相关文章
- NodeJs学习记录(六)使用 res.locals 传递参数到页面
res.locals的生命周期是单次请求,有点类似于java servlet 里的 httpServletRequest.setAttribute("param1",1); 既然 ...
- nodejs express 框架解密3-中间件模块
本文档是基于express 3.4.6 的 在上篇中我们提到了中间件,这篇主要解释这个模块,middleware.js 为: var utils = require('./utils'); /** * ...
- nodejs express 框架解密2-如何创建一个app
本文是基于express 3.4.6 的 1.在我们的app.js 文件里面有这么几行 http.createServer(app).listen(app.get('port'), function( ...
- NodeJS - Express 4.0下使用app.dynamicHelpers错误
在NodeJS - Express 4.0下使用app.dynamicHelpers发生错误: app.dynamicHelpers({ ^ TypeError: Object function (r ...
- nodejs+Express中使用mustache模板引擎
由于公司一个seo项目,需要我协助.此项目他人已经开发大半,由于seo需要,使用了服务器端模板引擎.我项目的后端同事说项目是go语音写的,跑项目麻烦,只给了我template和css等静态文件. 为了 ...
- 【Azure 应用服务】NodeJS Express + MSAL 应用实现AAD集成登录并部署在App Service Linux环境中的实现步骤
问题描述 实现部署NodeJS Express应用在App Service Linux环境中,并且使用Microsoft Authentication Library(MSAL)来实现登录Azure ...
- Express中的Ejs模板传值问题
在Ejs模板传值过程中,route下的变量值通过res.sender()中的变量参数传给views, 这时在views中若该变量在javascript代码中使用,可直接使用该变量,不必使用<% ...
- express 应用创建及app.js详解
#1 express 应用创建 1.安装node.js (自行百度) 2.npm install express -g 3.全局安装express生成器 express-generator npm i ...
- Nodejs Express 4.X 中文API 1--- Application篇
相关阅读: Express 4.X API 翻译[一] -- Application篇 Express4.XApi 翻译[二] -- Request篇 Express4.XApi 翻译[三] -- ...
随机推荐
- c++面向对象程序设计 课后题 答案 谭浩强 第四章
c++面向对象程序设计课后题答案 谭浩强 第四章 1: #include <iostream> using namespace std; class Complex {public: Co ...
- 7个好用的在线YouTube视频下载工具
title: 7个好用的在线YouTube视频下载工具 toc: false date: 2018-10-10 15:11:00 categories: methods tags: youtube C ...
- MVC 全局异常处理(适用多人操作)
自定义特性: using System; using System.Collections.Generic; using System.Linq; using System.Web; using Sy ...
- Ztree自动触发第一个节点的点击事件
1.代码 $(function () { var setting = { //check属性放在data属性之后,复选框不起作用 //check: { // enable: true //}, dat ...
- SQL--left join ,inner join, right jion, Limit
SQL Limit 语句 用于返回规定的数量记录.当数据库中的数据量十分庞大时,可以使用,返回指定的数量记录. 语句如:select * from grade limit 5.返回grade表中的前面 ...
- 关于Android对话框简单实用方法总结
要显示一个对话框,首先需要在xx.xml下添加一个Button按钮,并添加一个对应id. 单次点击事件对话框: button.setOnClickListener(new View.OnClickLi ...
- Unity设置Turorials-Wide布局
在bilibili上看关于UGUI官翻视频时,很喜欢对方的布局,自己照着改了下,改的步骤如下: 1, 先选用 2by3 布局 2, 把Project面板拖到Hierarchy下边 3, 把2列布局改成 ...
- kafka内外网集群配置
linux下配置使用以第一台为例(先配置好jdk环境)1.解压kafka:2.10-0.10.1.12.修改zookeeper.properties 新增配置:maxClientCnxns=0 tic ...
- BZOJ 4006 [JLOI2015]管道连接(斯坦纳树+子集DP)
明显是一道斯坦纳树的题. 然而这题只需要属性相同的点互相连接. 我们还是照常先套路求出\(ans[s]\). 然后对\(ans[s]\)做子集DP即可. 具体看代码. #include<iost ...
- Linux mysql-5.7.17安装 教程
1.下载安装文件 #mkdir /data #mkdir /data/software #cd /data/software #wget http://dev.mysql.com/get/Downl ...