【问题标题】:Access req and res inside of app.locals访问 app.locals 中的 req 和 res
【发布时间】:2012-12-02 22:33:03
【问题描述】:

尝试为 express 3.0 应用编写一些辅助方法。这是一个问候用户的示例:

  app.locals.greet = function(req,res) {
    return "hey there " + req.user.name;
  }

但是,reqres 在该函数中不可用。我将如何编写可以在我的玉模板中使用的助手?我做错了吗?

【问题讨论】:

  • writing helpers that I can use inside my jade templates 是什么意思?

标签: javascript node.js express connect


【解决方案1】:

看看我的配置app.js 文件!这应该对您有用,因为变量将在该上下文中可用。

app.configure(function(){
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');

app.use(connect.compress());
app.use(express.static(__dirname + "/public", { maxAge: 6000000 }));
app.use(express.favicon(__dirname + "/public/img/favicon.ico", { maxAge: 6000000 }));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(express.cookieParser());
app.use(express.session({
    secret: config.sessionSecret,
    maxAge: new Date(Date.now() + (1000 * 60 * 15)),
    store: new MongoStore({ url: config.database.connectionString })
}));
app.use(function(req, res, next){
    console.log("\n~~~~~~~~~~~~~~~~~~~~~~~{   REQUEST   }~~~~~~~~~~~~~~~~~~~~~~~".cyan);
    res.locals.config = config;
    res.locals.session = req.session;
    res.locals.utils = viewUtils;
        res.locals.greet = function(){
                //req and res are available here!
                return "hey there " + req.user.name;
        };
    next();
});
app.use(app.router);
});

【讨论】:

    【解决方案2】:

    下面是一个简单示例的三个部分,用于展示帮助函数如何使用req.locals

    辅助函数:

    app.locals.greet = function(user) {
      return "hey there " + user.name;
    }
    

    查看模板:

    h1= greet(user)
    

    渲染函数:

    function(req, res) {
      res.render('myview', {user: req.user});
    };
    

    如果您需要有关设置req.locals 的更多信息,请参阅我的回答herehere

    【讨论】:

      【解决方案3】:

      您需要添加一个中间件函数/处理程序,在路由器调用它的渲染方法之前使用req/res 对象设置这些值。同样,需要在定义了您需要知道的信息之后定义此处理程序。 (即会话中间件之后)

      // AFTER sessions/auth/etc -- app.use(express.session(...))
      app.use(function (req, res) {
          // set any locals using req/res
          res.locals.user = req.user;
          res.locals.greet = function () {
              return "hey there " + req.user.name;
          }
      });
      // BEFORE router -- app.use(express.router);
      

      有关详细信息,请参阅res.locals 上的 API 文档。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-10-07
        • 2021-10-08
        • 2022-12-11
        • 1970-01-01
        • 2012-11-20
        • 1970-01-01
        • 1970-01-01
        • 2015-12-24
        相关资源
        最近更新 更多