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

转自:https://blog.csdn.net/Elliott_Yoho/article/details/53537437javascript

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

locals对象

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

对于以下一个ejs模板:express

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

 

咱们能够像下面这样渲染页面,并向页面传递nameurlintroduce三个变量的值:ruby

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:markdown

<!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

app.localsres.locals学习

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

在中间件中使用

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

如,在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)
相关文章
相关标签/搜索