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)
相關文章
相關標籤/搜索