2

我正在使用 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 开发人员设计的正确方式仅与请求/响应对象交互来影响响应上下文吗?

4

1 回答 1

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(....) 中插入中间件

于 2012-09-05T13:13:51.053 回答