简体   繁体   English

如何将数据传递到Express 3中的每个视图?

[英]How to pass data to every view in Express 3?

I was using dynamicHelpers to set some variables on every page in Express 2. Now that they're gone and I'm not sure how to do it. 我正在使用dynamicHelpers在Express 2的每个页面上设置一些变量。现在它们已经消失了,我不知道该怎么做。 What is the best way to do something like this with Express 3? 使用Express 3做这样的事情的最佳方法是什么?

app.js app.js

app.dynamicHelpers( require('dynamicHelpers') )

dynamicHelpers.js dynamicHelpers.js

exports.user = function(req, res) {
    return req.user || {};
}

exports.message = function(req, res) {
    return req.flash.message || {};
}

in veiw.jade 在veiw.jade

h1= user.username

middleware example 中间件示例

var app = require('express')()
  , jade = require('jade')

app.set('views', __dirname + '/views')
app.set('view engine', 'jade')  

app.use(function(req,res,next){
  res.locals.user = { name : "test" }
  next()
})

app.get('*',function(req,res){
   res.render('index.jade')
})

app.listen('8001')

index.jade index.jade

!!! 5
html
  body
    div hello #{user.name}

to use req.flash try: 使用req.flash尝试:

var app = require('express')()
  , jade = require('jade')

app.set('views', __dirname + '/views')
app.set('view engine', 'jade')

app.use(require('connect-flash')())

// Expose the flash function to the view layer
app.use(function(req, res, next) {
   res.locals.flash = req.flash.bind(req)
   next()
})


app.get('*',function(req,res){
   res.render('index.jade')
})

app.listen('8001')

updated my answer, haven't migrated to 3.0 yet, at https://github.com/visionmedia/express/wiki/Migrating-from-2.x-to-3.x under View options: 更新了我的答案,还没有迁移到3.0,在https://github.com/visionmedia/express/wiki/Migrating-from-2.x-to-3.x查看选项:

The "view options" setting is no longer necessary, app.locals are the local variables 
merged with res.render()'s, so app.locals.pretty = true is the same as passing 
res.render(view, { pretty: true }).

You would want some middleware like the following before your route calls: 在路由调用之前,您需要一些类似以下的中间件:

app.use(function(req,res,next){
  res.locals.user = {username: 'test'};
  next();
});

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM