app.local和res.local的选择

最近几天有些不舒服,都没怎么开工,今天来补篇博客~

app.locals

app.locals是一个JS 对象,可以被认为是全局变量,也就是global。一旦进行了设置,app.locals属性在应用程序的整个生命周期一直存在。在模板引擎中,我们用app.locals传递希望放在每个单页上的东西。

res.locals属性只在request的生命周期内才有效,res只响应特定的response,例如:

1
2
3
app.get('/abc',function(req, res){
res.locals.name = req.name;
});

可以如下顺序(加粗的表示是人为操作的):

  • app被创建了 (var app = express())
  • app.locals被创建
  • request到达
  • 特定的res.locals被创建响应相应的request
  • 你向res.locals传入了数据,比如res.locals.name = “daniel”
  • 你通过res.render()返回了数据给模板
  • res.local被垃圾回收
  • app.locals仍然存在(因为一直伴随整个生命周期)

来自nodejs in action一书,用一个比较容易理解的狂徒介绍了二者的不同,可以帮助我们更好的理解。