记录mapbox配置tileUrl代理遇到的问题

814 阅读1分钟

背景:

单独请求切片URL控制台产生跨域错误,配置代理过程中一直不成功(前端使用egg库), 导致页面一直拿不到正确的切片结果,地图底图也渲染失败。

问题描述:

浏览器报无法解析json的错误。

问题解决

思路:
1. mapbox 版本太低,不支持代理
2. 代码中别处可以使用原url进行切片请求,为什么我们不行?
3. egg发送请求过程中没有配置请求头contentType
4. 代理地址拼写错误

最后结论:代理地址拼写错误。

解决过程

思路1: 升级版本。

结果:无法解析json(后续发现是因为返回的错误是一个html文本,而contentType代表以json格式解析结果,故出现的报错)。没有达到目的,故终止。

思路2: 对比俩tiles不同

结果: 别处使用[https://baidu.com/vector/?&x={x}&y={y}&z={z}]
我们使用[https://baidu.com?&x={x}&y={y}&z={z}]
服务端 nginx 对/verctor路由做了跨域资源配置管理。我们不能直接使用。故终止。

思路3: 比较原url请求和代理之后的url请求头、响应头信息。

结果:contentType不一致。配置this.ctx.set('content-type', 'image/png');this.ctx.safeCurl(url,{data-type:'json',content-type:'image/png;image/jpeg'})等(参考egg文档)均未达到理想效果,浏览器preview 404,故找到下一思路。

思路4: 打印真实请求url

结果:代理后的url多了/appmaptile, 至此,找到真实原因。对代理后的地址做替换处理。最后,浏览器以及postman访问均正常。

总结

文章不太好写,单纯记录问题出现及解决的思路,遇到问题,正视问题,合理运用Google,保持耐心。