tilestrata-headers插件用来设置请求的响应头response headers,常用的可以解决缓存控制、跨域等问题,实用性很高。

demo 项目可以参考tilestrata-sample-code

1. 安装

npm install tilestrata-headers --save

2. 使用

var headers = require("tilestrata-headers");
var tilestrata = require("tilestrata");

server = tilestrata();

server
.layer("osm_mvt_amenities")
.route("tile.mvt")
.use(
headers({
"Access-Control-Allow-Origin": "*",
"Cache-Control": "max-age=3600"
})
);

server.listen(8080);

3. 效果

demo 项目可以参考tilestrata-sample-code

未开启

开启

4. 代码浅析

原理比较简单,在tilestrata的设计中,会使用use去注册各种类型的插件,tilestrata-headers就是reshook类型的插件,在初始化的过程中会被注册

TileRequestHandler.prototype.use = function(plugin) {
if (!plugin) return this;
// ...简化后的代码
if (plugin.reshook) return this._registerResponseHook(plugin);
};

TileRequestHandler.prototype._registerResponseHook = function(plugin) {
var id = "reshook#" + this.responseHooks.length;
if (!plugin) throw new Error("Falsy value passed to registerResponseHook()");
if (typeof plugin.reshook !== "function")
throw new Error(
"Attempted to register a response hook with no reshook() method"
);
this.responseHooks.push({ id: id, plugin: plugin });
return this;
};

通过这种方式,插件劫持每个 response,给每个 response header 加上我们自定义的内容。