在express中,当我使用路由中间件时,可以附加到请求对象吗?或者这是一种糟糕的模式?替代方案?谢谢
app.get('/', getLayout, function(req, res){
if(req.layout == 'simple') ...render simple layout...
else ...render full layout...
});
其中
getLayout = function(req, res, next){
req.layout = (req.params.blah == 'blah') ? 'layout_simple' : 'layout_full';
next();
}
我不明白你为什么不应该这样做。
我经常这样做。
我的印象是这就是中间件通常所做的。
从快递文件:http://expressjs.com/guide.html#route-中间件
他们在中间件中将req.user设置为当前用户。
我同意j_mcnally的观点,只要你不过分,这是一个很好的模式。具体来说,我将大多数与响应更密切相关的内容附加到res
对象。这可能是布局信息、HTML片段、响应的中间jsdom-env表示等。对于req
,附加查询字符串或请求主体信息的表示是有意义的。这可能是输入参数、解析的搜索查询、当前用户对象等。
express文档建议这在某种程度上是一种标准做法:
http://expressjs.com/guide.html#route-中间件
但由于V8的工作方式,它会显著影响性能:
http://blog.tojicode.com/2012/03/javascript-memory-optimization-and.html
http://www.scirra.com/blog/76/how-to-write-low-garbage-real-time-javascript