0

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

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

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

4

3 回答 3

2

看看我的配置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);
});
于 2012-12-14T22:25:32.097 回答
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查看我的答案。

于 2012-12-15T02:07:21.030 回答
2

您需要添加一个中间件函数/处理程序,该函数/处理程序将在路由器调用它的渲染方法之前使用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 文档。

于 2012-12-15T16:28:21.390 回答