迁移Express.js 2到3,特别是app.dynamicHelpers()到app.locals.use?

从版本2更新到Express.js 3,以下调用app.dynamicHelpers({..})因为它不再存在于V3中:

 app.dynamicHelpers({ request: function(req){ return req }, ...etc. }); 

有一个移民指南说:

  • app.dynamicHelpers() (使用中间件+ res.locals)

但我很难过如何做到这一点。 有一个更具体的例子如何迁移?

相关SOpost: nodejs express 3.0

我有session.user相同的问题,只是通过理解,app.use函数需要在configuration部分,而不是以前的位置。

之前:

 app.configure(); app.dynamicHelpers({ user: function(req, res) { return req.session.user; } }); 

后:

 app.configure(function(){ //... app.use(function(req, res, next){ res.locals.user = req.session.user; next(); }); //... }); 

对于Flash有一个在连接闪光看

16票的解决scheme是正确的,但一定要使用app.use(app.router);之前的res.locals分配app.use(app.router); 参考这篇文章https://stackoverflow.com/a/12597730/1132109

reponse.locals.use是Express的一个新的有用的function,可以让你发送一个variables给你的模型,首先需要进行评估。 比方说,你想发送3个variables到你的视图,所有这些都必须在请求一个mongodb之后。 “老”的方法是嵌套3callback,当最后一个回报你会呈现你的看法。 locals.use使得它更容易一些,因为它会评估你的函数,并只会在所有的评估结果都呈现你的视图。

下面是关于如何使用它们的一小段代码(这是咖啡脚本,希望你可以把它转换为javascript:D)

 response.locals.use (request, response, done) -> myAsynchMethod (value) -> reponse.locals.myProperty = value done() 

在这种情况下,将会有一个名为myProperty的variables,您可以在您的视图上使用它的值设置为任何myAsynchMethod给callback。

看看github上的例子文件夹。 例如auth :

 app.use(function(req, res, next){ var err = req.session.error, msg = req.session.success; delete req.session.error; delete req.session.success; res.locals.message = ''; if (err) res.locals.message = '<p class="msg error">' + err + '</p>'; if (msg) res.locals.message = '<p class="msg success">' + msg + '</p>'; next(); }); 

然后,您可以在模板中使用variables“消息”。