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

我正在使用Express来为node.js应用程序中的网页提供服务。

假设我希望在响应对象的render方法呈现的所有视图中都有一个variablesfoo 。 我知道我可以为这个任务定义dynamic助手。 然而,当你需要像这样asynchronous设置助手variables(Mongoose示例)时,我发现它们不合适:

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

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

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

它按预期工作,但是,我有点害怕这种简单的方法不是最好的解决scheme。 有人可以给我任何想法如何影响响​​应上下文通过与Express开发人员正确devise的请求/响应对象进行交互?

Express 3.x允许以“app.use”的forms使用asynchronous帮助程序。 所以对于一个简单的全局'foo'variables,你的代码如下:

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

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