Nodejs Express - 动态助手错误

3

我正在尝试使用以下内容运行我的应用程序:

app.configure(function(){
  app.set('views', __dirname + '/views');
  app.enable('jsonp callback');
  app.set('view engine', 'jade');
  app.set('view options', {layout : false});
  app.use(express.bodyParser());
  app.use(express.cookieParser());
  app.use(express.session({
    secret : 'abcdefg'      
  }));
  app.use(express.methodOverride());
  app.use(app.router);
  app.use(express.static(__dirname + '/public'));

});

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

当运行node app.js时,会出现以下错误信息:
app.dynamicHelpers({

TypeError: Object function app(req, res){ app.handle(req, res); } has no method 'dynamicHelpers'
    at Object.<annonymous> (C:\nodeapps\nodeblox\app.js:35:5)
    at Module._compile (module.js:449:26)
    at Object.Module._extensions..js (module.js:467:10)
    at Module.Load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Module.runMain (module.js:492:10)
    at process.startup.processNextTick.process._tickCallBack (node.js:244:9)

我对使用Node.js还比较新,但我知道在Express中不再支持dynamicHelpers()。我尝试重新编写代码,但仍然遇到了各种错误。请问如何正确修复dynamicHelpers代码,以确保其余的代码仍能正常工作?

谢谢!

2个回答

5
我猜你使用的不是 Express 2 而是 Express 3。这里有一个迁移指南可以帮助你弄清楚发生了什么。关于 dynamicHelpers(),你需要明白 app.use 函数需要在配置部分中使用,而不是之前的位置。

之前

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

现在在E3展会上

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

谢谢您的回复。在我编写了“- if(session.user)”的地方,我想要展示一个已登录标签,但是现在我无法像使用dynamicHelpers一样检查他们是否已经登录。您有什么建议可以替代这种方法吗? - germainelol
据我所知,现在您需要使用会话本身来注册用户是否已登录。通常,如果您喜欢使用cookie,可以使用cookieParser()来实现。 - toxicate20
是的,不幸的是,无论我在哪里写session.*.*,都会得到“session未定义”的错误。你能否提供一个示例或解释一下你所说的内容?我是新手,正在使用express/nodejs,我理解了代码的所有概念,但对某些功能不太熟悉,抱歉! - germainelol
我看到你又针对这个问题开了一个新的提问。请确保如果答案正确,接受它们,这样其他人就可以看到解决方案是否正确。 - toxicate20
不好意思,我忘了这个,因为我没想到你会回复我的评论,所以我另开了一个问题。感谢您的帮助,如果您能继续帮忙解答我的另一个问题,我会非常感激。已接受您的答案! - germainelol

0
**In Epress3.x** there seems to be having no concept of static or dynamic.
use global or local instead.

/*Global*/
app.locals({ foo: 'bar' });
//or
app.locals.foo = 'bar';

/*For single request*/
res.locals({ foo: 'bar' });
//or
res.locals.foo = 'bar';

更多 差异请参考这里


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接