【问题标题】:Nodejs Express - dynamicHelpers errorNodejs Express - 动态助手错误
【发布时间】:2012-11-22 17:11:59
【问题描述】:

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

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)

我对使用 nodejs 有点陌生,但我知道 Express 不再支持 dynamicHelpers(),我尝试重新编写代码并继续在各处出错。修复此 dynamicHelpers 代码以确保其余代码仍然正常工作的正确方法是什么?

谢谢!

【问题讨论】:

    标签: javascript node.js mongodb express


    【解决方案1】:

    我猜您使用的不是 Express 2,而是 Express 3。migration guide 可以帮助您弄清楚发生了什么。对于 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) 我想表明他们是登录标签,如果他们已登录,我现在无法像使用动态助手一样检查。你会建议用什么来代替这样的东西?
    • 据我所知,如果用户已登录,您现在需要使用会话本身进行注册。如果你喜欢 cookie,通常我会用 cookieParser() 来做到这一点。
    • 是的,不幸的是,无论我写了session.*.*,我都会收到session is not defined,您能否链接一个示例或解释您所说的内容?我是使用 express/nodejs 的新手,我了解代码的所有概念,但我对某些功能不太熟悉抱歉!
    • 我看到你对这个问题提出了另一个问题。请确保您接受正确的答案,以便其他人可以查看解决方案是否正确。
    • 很抱歉忘记这样做了,我已经打开了另一个问题,因为我没想到你会回答评论。感谢您的帮助,如果您能提供帮助,我将不胜感激其他问题的帮助。接受答案!
    【解决方案2】:
    **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';
    

    更多区别参考Here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-09
      • 2014-09-11
      • 1970-01-01
      • 1970-01-01
      • 2016-10-26
      • 1970-01-01
      • 2020-11-16
      • 2021-03-17
      相关资源
      最近更新 更多