尝试为 Express 3.0 应用程序编写一些帮助程序方法。下面是一个问候用户的示例:
app.locals.greet = function(req,res) {
return "hey there " + req.user.name;
}
但是,req
和res
在该函数中不可用。我将如何编写可以在我的玉石模板中使用的助手?我做错了吗?
看看我的配置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);
});
一个简单示例的三个部分,用于显示帮助程序函数如何使用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
的更多信息,请在此处和此处查看我的答案。
添加一个中间件函数/处理程序,该函数/处理程序将在路由器调用其 render 方法之前使用 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 文档。