CNode

express视图助手dynamicHelpers和helpers从2.x到3.x改成什么了?

Ffinnishare发布于14 年前最后回复12 年前32 回复17731 浏览0 收藏

是分离出去变中间件了,还是其他。找了一个早上,资源太匮乏了 app.dynamicHelpers() (use middleware + res.locals) 不明呀!!!! app.helpers() (use app.locals) 以验证

给个例子最好

查看回复

回复 (32)

F
finnishare#1·14 年前

自己顶下坐等答案

P
peakzhuqq#2·14 年前

是啊,哪位大侠给个例子。

A
atian25#3·14 年前

2.x:

app.helpers({
  config: config,
  title: config.title
});
app.dynamicHelpers({
  //防止csrf攻击
  csrf: function(req,res) {
    return req.session ? req.session._csrf : '';
  },
  req: function(req,res) {
    return req;
  },
  userInfo: function(req,res){
    return req.session.user;
  }
});

3.x

//app.helpers() 
app.locals({
  config: config,
  title: config.title
});
//app.dynamicHelpers
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;
  next();
});
app.use(app.router);
F
finnishare#4·14 年前

3Q,也是刚在google的group的历史中找到!!!

P
peakzhuqq#5·14 年前

请问您是怎么上google group的。我好想上不去。

F
finnishare#6·14 年前

我看的是个历史快照,哈哈

P
peakzhuqq#7·14 年前

那您是如何操作的? 能发个图教我下吗?新手,请见谅啊。呵呵

A
atian25#8·14 年前

翻、墙

F
finnishare#9·14 年前

res.locals.csrf = req.session ? req.session._csrf : '';确定可以这样写?

res.locals.success=req.flash("success").lenght?req.flash("success"):null; 无效

A
atian25#10·14 年前

确定,我的项目中有用到。 PS,是length

F
finnishare#11·14 年前

苍天呀!!!!length

res.locals.csrf = function(){if(){}else{}} 是否可行?

A
atian25#12·14 年前

为啥不用 if(xxx)res.locals.csrf = '' else res.locals.csrf = ''

F
finnishare#13·14 年前

说实话还是不能理解为什么要把dynamicHelpers给删掉,哪怕有别的方式可以实现,也可以保留来达到结构清晰。

做了好多年js,最近在看node,还是觉得学习曲线有点陡峭。太小众了,资料少的可怜~~

A
atian25#14·14 年前

其实仔细体味了下, 用middleware比dynamicHelpers强大和清晰多了。 毕竟node还没有1.0嘛。。。 以前学extjs的时候,那也好陡啊。 今天在看derby.... 云里雾里的...

P
peakzhuqq#15·14 年前

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| 44| <%= success %> 45|

success is not defined`

S
sumory#16·14 年前
引用 peakzhuqqapp.use(function(req, res, next){ //res.locals.title = config['title'] //res.locals.csrf = req.s...

res.locals.success = req.success;这是怎么来的?你req里有success?

P
peakzhuqq#17·14 年前

那success要怎么传过来呢

P
peakzhuqq#18·14 年前
res.locals.success = 'success' ;

我现在改成这样,页面还是报success is not defined

X
xieyijun#19·14 年前

书本的例子

app.dynamicHelpers({ user: function (request, response) { return request.session.user; }, error: function (request, response) { var err = request.flash('error'); if (err.length) return err; else return null; }, success: function (request, response) { var succ = request.flash('success'); if (succ.length) return succ; else return null; } }); 现在也不行了,3已经益处了这个API,搜索了一下,好像说用"everyauth" 但是我不知道要怎么使用,哎。。。express3之后,好多模块都改变了,苦逼啊。

P
papaivan#20·14 年前

这个express讲的非常不明白啊。

A
alvis#22·14 年前
引用 alvis[http://jimpravetz.com/blog/2012/08/express 3 migration issues/][1] 有解决方法,但我不想使用app.set [1]: htt...

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

Y
yakczh#25·13 年前

app.set以后,在第三方的模块中怎么得到set的值?

S
submerge#26·12 年前
引用 alvis[http://jimpravetz.com/blog/2012/08/express 3 migration issues/][1] 有解决方法,但我不想使用app.set [1]: htt...

我写的代码是这样的: app.locals({ inspect:function(obj){ return util.inspect(obj,true); } });

app.use(function(req,res,next){ res.locals.headers = req.headers; next(); }); app.get('/helper',function(req,res){ res.render('helper',{title:'Helpers'}); }); helper.ejs代码如下:<%= inspect(headers)%> 问什么访问总是报headers is not defined求指点这是怎么回事啊?

S
submerge#27·12 年前
引用 xieyijun书本的例子 app.dynamicHelpers({ user: function (request, response) { return request.session.user; }, ...

这个问题解决了没?我也遇到了同样的问题,搞了大半天了,还是没眉目,求指点。。。

F
Fanghehe#29·12 年前
引用 finnishareres.locals.csrf = req.session ? req.session. csrf : '';确定可以这样写? res.locals.success=req.flash("su...

现在版本的req.flash取了一次值之后就无效了。。所以req.flash("success").lengh?req.flash("success"):null; 前面那个值是1,后面req.flash("success")已经变成null了。。。

Y
yuyunliuhen#32·13 年前

也遇到这个问题,谢谢分享!

参与回复
登录后即可参与回复。登录