express3中删除了helpers,用locals了,但是怎么用呢,只是换了名字么?尝试无果。
发布于 12 年前 作者 kongkang 6385 次浏览 最后一次编辑是 8 年前

RT

14 回复

设置了 app.locals 之后,每次执行 res.render() 时,都会默认加上app.locals里面的数据

看官网文档差不多就是这个样子

app.configure(function() {
  app.use(express.csrf());
  //原来的dynamicHelpers
  app.use(function(req, res, next) {
    res.locals.csrf = req.session ? req.session._csrf : '';
    next();
  });
});
//原来的helpers
app.locals({ title: config.title });

use是中间件啦。

这个我猜测是因为之前的设计,概念太多,这次精简了。是一次进步。

@darklowly 就是用中间件代替

app.dynamicHelpers() (use middleware + res.locals)

这哥们儿到底想干嘛…

app.use(function(req, res, next){
  //res.locals.title = config['title']
  //res.locals.csrf = req.session ? req.session._csrf : '';
  res.locals.req = req;
  res.locals.session = req.session;
  res.locals.error = req.error;
  res.locals.success = req.success;
  res.locals.docs = req.docs;
  next();
});//locals

我已经定义了success,但是为什么页面还报success没有定义呢?

ReferenceError: c:\node\project\microblog\views\layout.ejs:42
40|
41|                         <div id="container" class="container">

42| <% if (success) { %> 43| <div class=“alert alert-success”> 44| <%= success %> 45| </div>

success is not defined

res.locals.success = req.success ? req.success : null;

话说我都不知道你写的是啥…

你的req.success什么时候填值的?如果是在某个route里面, 那肯定没有,因为是先执行你这个middleware(相当于java的filter),在执行你的action的.

谢谢大家! 就是想问res.locals是怎么用的,后来想来想去觉得他就像是个全局的变量。

res.locals 是某次请求的服务器回复里面的变量吧, res = response , locals名字都是本地变量集合的意思了

我正在找这方面的内容呢

请问ejs中怎样使用res.locals定义的变数?

发现了答案,使用locals.XXX就能取得res.locals.XXX= …中设定的值

回到顶部