Node.js / Express - 通过请求/响应对象修改响应模板上下文

时间:2012-07-27 12:52:33

标签: node.js express

我使用Express在node.js应用程序中提供网页。

假设我希望在响应对象的foo方法呈现的所有视图中都有变量render。我知道我可以为此任务定义动态帮助器。但是,当你需要像这样异步设置辅助变量时,我发现它们不合适(Mongoose示例):

Thing.count(filter, function(error, thingCount) {
    foo = thingCount;
}

我尝试过使用适合我的连接中间件方法,但这里的问题是如何影响响​​应上下文。通过查看render中的express/lib/view.js方法定义,我发现可以通过写入app._locals对象来操作它:

function putFooIntoContext (req, res, next) {
  Thing.count(filter, function(error, thingCount) {
    res.app._locals.foo = thingCount;
    next();
  }
}

它按预期工作,但是,我有点担心这种简单的方法不是最好的解决方案。有人可以通过以Express开发人员设计的正确方式与请求/响应对象进行交互来向我提出如何影响响​​应上下文的任何想法吗?

1 个答案:

答案 0 :(得分:0)

Express 3.x允许以'app.use'的形式使用异步助手。因此,对于一个简单的全局'foo'变量,您的代码如下:

app.use(req, res, next) {
    Thing.count(filter, function(error, thingCount) {
        res.locals.foo = thingCount;
        next();
    });
}

当然,中间件选项也是有效的,这只是另一种观点,可以节省每个app.get(....)插入中间件