现在我想实现一个需求:如果响应类型是 text/html,那么我需要统一设置一些 HTTP 响应头比如 Cache-Control、X-Frame-Options等,当然最好通过中间件的形式来实现,我总不能在每一次响应 html 之前都重复这一段代码:
res.set( {
'Cache-Control' : 'public, max-age=60' ,
'X-Frame-Options' : 'DENY'
} );
但如果我直接把这段代码写成一个中间件的话,其它类型比如css
、js
的缓存时间也会被覆盖掉;
然后我又想到了打补丁的方式:
var render = res.render;
res.render = function () {
res.set( {
'Cache-Control' : 'public, max-age=60' ,
'X-Frame-Options' : 'DENY'
} );
render.apply( res , arguments );
};
那么问题又来了,如果按照这样的思路,我还需要为其它类似方法如res.sendFile()
、res.send()
都打一个补丁,但我找不到某种方法来判断此次 res 是否会返回一个 html。
最后我想来想去只有这么做了:
设计 URL 的时候遵循一定的规则,比如加后缀 .json
表示这个网址会返回 json ,加后缀 .html
表示这个网址会返回 html 等等。这样我就可以在一个中间件里面通过后缀来判断该怎么控制了。这估计是最后的王牌了。
但难道没有更好更通用的方法了吗?求助= =