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

问题描述:

我正在使用Express来为node.js应用程序中的网页提供服务。Node.js/Express - 通过请求/响应对象修改响应模板上下文

比方说,我想有一个变量foorender响应对象的方法呈现的所有视图中可用。我知道我可以为这个任务定义动态助手。然而,我发现他们不适合当你需要异步设置辅助变量像这样(猫鼬为例):

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开发人员合理设计的请求/响应对象交互来影响响应上下文吗?

Express 3.x允许以'app.use'的形式使用异步助手。因此,对于一个简单的全球性“富”的变量,你的代码将如下所示:

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

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