当前位置: 首页 > 面试题库 >

ExpressJS 3.0如何将res.locals传递到玉视图?

乌鸿宝
2023-03-14
问题内容

我想在用户登录失败后显示提示信息,但我无法在Jade视图中显示变量。

我有一些片段,我知道我必须在我的app.configure()中使用它:

    app.use (req, res, next) ->
      res.locals.session = req.session

在用户输入错误的密码后,我将设置闪存消息是什么:

     exports.postSession = (req, res) ->
       users = require '../DB/users'
       users.authenticate(req.body.login, req.body.password, (user) ->
       if(user)
         req.session.user = user
         res.redirect(req.body.redirect || '/')
       else
         req.session.flash = 'Authentication Failure!'
         res.render('sessions/new', {title:'New', redirect: req.body.redirect })
      )

我不知道如何访问res.locals.session我的Jade文件。我怀疑我是否将所有设置正确。这个问题很像这样:将Express.js2迁移到3,特别是将app.dynamicHelpers()迁移到app.locals.use?但我仍然无法正常工作。如果有人可以向我展示一个简单的示例,说明如何在res.local中设置值并在视图中访问它们,将不胜感激。

ps我确实了解connect-flash,但是我需要了解如何使视图中的内容可用。

这是我的应用程序:

app.configure(() -> 
  app.set('views', __dirname + '/views')
  app.set('view engine', 'jade')
  app.use(express.bodyParser())
  app.engine('.jade', require('jade').__express)
  app.use(express.methodOverride())
  app.use(express.cookieParser())
  app.use(express.session({ store: new express.session.MemoryStore({reapInterval: 50000 * 10}), secret: 'chubby bunny' }))
  app.use(express.static(__dirname + '/public'))
  app.use((req, res, next) ->
    res.locals.session = req.session
    next()
  )
  app.use(app.router)
)

问题答案:

只是给每个有同样问题并得到改变的印象的人一个简短的摘要res.redirect

app.use中间件放在 前面 非常重要app.router。请参阅《快报》作者TJ Holowaychuck的评论

  • https://groups.google.com/d/msg/express-js/72WPl2UKA2Q/dEndrRj6uhgJ

这是使用Express v3.0.0rc4的全新安装的示例

app.js:

app.use(function(req, res, next){
  res.locals.variable = "some content";
  next();
})

app.configure(function(){
  app.set('port', process.env.PORT || 3000);
  app.set('views', __dirname + '/views');
  app.set('view engine', 'jade');
  app.use(express.favicon());
  app.use(express.logger('dev'));
  app.use(express.bodyParser());
  app.use(express.methodOverride());
  app.use(app.router);
  app.use(express.static(path.join(__dirname, 'public')));
});

index.jade:

extends layout

block content
  h1= title
  p Welcome to #{title}
  p= variable


 类似资料:
  • 我将页码信息从主报表传递到页脚子报表。在主报表中,我已经声明了子报表参数pageTot和pageNum。它们通过向导映射到主报告$V{PAGE _ COUNT}和$V{PAGE _ NUMBER}中的参数。在子报表中,我声明了两个参数pageNum和pageTot。在它们的参数属性中,我取消了将use作为提示,并将它们都设置为java.lang.integer类型。然后,我替换了文本字段的文本字段

  • 问题内容: 我在未传递到javascript文件的玉模板文件(index.jade)中声明的变量(config)遇到问题,这使我的javascript崩溃了。这是文件(views / index.jade): 这是我的app.js(服务器端)的一部分: 这是我的javascript文件崩溃的一部分(public / javascripts / app.js): 我正在本地主机(我自己的机器)上的开

  • 问题内容: 我正在尝试将简单的URL传递给play框架应用程序中的视图,但是当以字符串形式传递时,URL中的更改为导致URL不起作用的位置。 如果我将参数更改为Html,即更改为,则在尝试将url作为字符串传递给method 时出现错误。 如何将url转换为HTML并以此传递? 问题答案: 为了防止动态内容在视图上发生默认的转义,您需要使用with 函数包装: 视图: 控制器: 有关更多信息,请参

  • 问题内容: 我正在尝试创建以start_date和end_date为参数的 JR 报告。 查询: 代码: 我们可以将两个参数传递到表中的同一列吗?例如: 问题答案: 您的代码是错误的。 您应该传递如下参数: 您无需添加 到参数名称。 JasperReports 分发包中有很多示例。 您可以查看此样本以获取更多详细信息。

  • 问题内容: 简单的问题。 如何将变量从URL传递到视图?我正在跟踪Date示例。 我的观点需要争论: 我的url.py有这个” 我知道我需要传递另一个参数,但是我不知道如何从URL字符串中获取数字(即“ time / plus / 4 /”。类似这样的东西? 问题答案: 您可以在正则表达式中使用命名组

  • 问题内容: 我想在Laravel 5应用程序的所有视图中都可以访问一些默认数据。 我尝试搜索它,但仅找到Laravel 4的结果。我在这里阅读了文档“使用所有视图共享数据” ,但我不知道该怎么做。以下代码应放在哪里? 谢谢你的帮助。 问题答案: 这个目标可以通过不同的方法来实现, 1.使用BaseController 我喜欢设置的方式,我制作了一个扩展Laravel自己的类,并在那里设置了各种全局