Mapbox—geocoder搜索地点error eaching the server

——There was an errorr eaching the server

环境说明:

vue3.3.4

mapbox-gl: 2.13.0

@mapbox/mapbox-gl-geocoder: 4.7.4

一、错误呈现

​ 当地图初始化成功后,添加mapbox geocoder的控件,本地开发环境测试没有问题,vue3环境使用vite打包后,检索地点(北京)出现There was an errorr eaching the server的错误提示。

​ 此时的网络请求如下:

二、解决办法

经过对比本地开发测试的成功案例,和打包后的错误请求,再加上mapbox/mapbox-gl-geocoder源码(https://github.com/mapbox/mapbox-gl-geocoder)学习,解决办法如下:

  • 错误原因:根据输入地点检索符合城市信息的网络请求缺少 access_token,并且错误的网络请求前面的地址是本地的IP,正确的应该为https://api.mapbox.com

图:正确的网络请求

图:错误的网络请求
  • 解决思路:更改源码

    原理:在网络请求前添加access_token请求参数,并且更改请求地址

  1. 传入前端传递的access_token
// *\node_modules\@mapbox\mapbox-gl-geocoder\lib\index.js
// _geocode函数内部
const config = this._setupConfig(requestType, searchInput);
// 此处添加
config.access_token = this.options.accessToken; // 添加的token var request;
switch (requestType) {
case GEOCODE_REQUEST_TYPE.LOCAL:
request = Promise.resolve();
break;
case GEOCODE_REQUEST_TYPE.FORWARD:
request = this.geocoderService.forwardGeocode(config).send();
break;
case GEOCODE_REQUEST_TYPE.REVERSE:
request = this.geocoderService.reverseGeocode(config).send();
break;
}
  1. 添加传入数据的验证信息
// node_modules\@mapbox\mapbox-sdk\services\geocoding.js
// Geocoding.forwardGeocode函数
v.assertShape({
query: v.required(v.string),
mode: v.oneOf('mapbox.places', 'mapbox.places-permanent'),
countries: v.arrayOf(v.string),
proximity: v.oneOf(v.coordinates, 'ip'),
types: v.arrayOf(v.oneOf(featureTypes)),
autocomplete: v.boolean,
bbox: v.arrayOf(v.number),
limit: v.number,
language: v.arrayOf(v.string),
routing: v.boolean,
fuzzyMatch: v.boolean,
worldview: v.string,
// 此处添加
access_token: v.string, // 添加access_token验证,如果不添加则传入参数会报错:验证失败
})(config);

3. 修改请求参数

备注:可以把config.access_token固定,换成自己的mapbox token,这样步骤1和2就不需要更改(下文是根据前端传入的token动态进行变更)

// node_modules\@mapbox\mapbox-sdk\services\geocoding.js
// Geocoding.forwardGeocode函数
return this.client.createRequest({
method: 'GET',
// 此处修改,添加https://api.mapbox.com前缀 和 "?access_token=" + config.access_token后缀
path: 'https://api.mapbox.com/geocoding/v5/:mode/:query.json' + "?access_token=" + config.access_token,
params: pick(config, ['mode', 'query']),
query: query
});

Mapbox—geocoder搜索地点error eaching the server的更多相关文章

  1. mysqldump: Error: Binlogging on server not active

    在学习使用mysqldump时,使用mysqldump备份时,遇到了下面两个错误: [root@DB-Server backup]# ./mysql_dump_back.sh Warning: Usi ...

  2. JMeter遇到的问题一:Error writing to server(转)

    Java.io.IOException: Error writing to server异常:我测试500个并发时,系统没有问题:可当我把线程数加到800时,就出现错误了,在"查看结果树&q ...

  3. 502 Proxy Error The proxy server received an invalid response from an upstream server

    Proxy Error The proxy server received an invalid response from an upstream server. The proxy server ...

  4. centos 7 运行Quartus ii 17.0 标准版,下载程序时遇到错误error (209053): unexpected error in jtag server -- error code 89

    对于错误error (209053): unexpected error in jtag server -- error code 89,它产生的原因在于,在linux系统下,Quartus ii的驱 ...

  5. 在使用pydelicious时出现HTTP Error 500: Internal Server Error的错误的解决方法:

    问题:在学习<集体智慧编程>的过程中,第二章中如果你遇到了pydelicious.PyDeliciousException: HTTP Error 500: Internal Server ...

  6. flask+mako+peewee(下)(解决了Error 2006: MySQL server has gone away)

    这篇主要介绍在这次项目中使用的peewee 文档地址:http://peewee.readthedocs.org/en/latest/index.html 首先我们要初始化一个数据库连接对象.这里我使 ...

  7. ThinkPHP出现General error: 2006 MySQL server has gone away的解决方法

    错误: #13 {main}SQLSTATE[HY000]: General error: 2006 MySQL server has gone awayFILE: \ThinkPHP\Library ...

  8. python urllib2导出elasticsearch数据时 返回 "urllib2.HTTPError: HTTP Error 500: Internal Server Error"

    0.业务场景 将ES中某个index的某个字段的所有数据,导出到文件中 1.ES数据导出方法简述 ES数据导出方法,我主要找到了以下几个方面,欢迎大家补充: ES官方API:snapshot and ...

  9. 记一次安装kolla遇到DockerException: Error while fetching server API version: Timeout value connect was Timeout的问题

    1)环境信息: docker版本:17.09,当docker的版本是12.06时,也会报这个错误 [root@localhost ~]# docker --version Docker version ...

  10. An internal error occurred during: &quot;Checking tomcat state&quot;. Error while reading server.xml

    An internal error occurred during: "Checking tomcat state". Error while reading server.xml ...

随机推荐

  1. 笔记:C++学习之旅---指针

    笔记:C++学习之旅---指针 为什么要使用指针 因为在操作大型数据和类时,由于指针可以通过内存地址直接访问数据,从而避免在程序中赋值大量的代码,因此指针的效率最高,一般来说,指针会有三大用途: 1: ...

  2. 快速傅里叶变换FFT学习笔记

    点值表示法 我们正常表示一个多项式的方式,形如 \(A(x)=a_0+a_1x+a_2x^2+...+a_nx^n\),这是正常人容易看懂的,但是,我们还有一种表示法. 我们知道,\(n+1\)个点可 ...

  3. SpringBoot自定义注解+AOP+redis实现防接口幂等性重复提交,从概念到实战

    本文为千锋教育技术团独家创作,更多技术类知识干货,点个关注持续追更~ 接口幂等性是Web开发中非常重要的一个概念,它可以保证多次调用同一个接口不会对结果产生影响.如果你想了解更多关于接口幂等性的知识, ...

  4. 2021-11-01:寻找重复数。给定一个包含 n + 1 个整数的数组 nums ,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数。假设 nums 只有 一个重复的整数

    2021-11-01:寻找重复数.给定一个包含 n + 1 个整数的数组 nums ,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数.假设 nums 只有 一个重复的整数 ...

  5. vue全家桶进阶之路33:Vue3 计算属性computed

    在Vue3中,计算属性可以使用computed函数来定义. computed函数接受两个参数:第一个参数是一个函数,该函数返回计算属性的值:第二个参数是一个可选的配置对象,可以包含getter和set ...

  6. < Python全景系列-3 > Python控制流程盘点及高级用法、神秘技巧大揭秘!

    欢迎来到我们的系列博客<Python全景系列>!在这个系列中,我们将带领你从Python的基础知识开始,一步步深入到高级话题,帮助你掌握这门强大而灵活的编程语法.无论你是编程新手,还是有一 ...

  7. L2-035 完全二叉树的层序遍历

    题目描述: 一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是完美二叉树.对于深度为 D 的,有 N 个结点的二叉树,若其结点对应于相同深度完美二叉树的层序遍历的前 N 个结点,这样的树就 ...

  8. HashMap 底层是如何实现的?

    HashMap 在不同的 JDK 版本下的实现是不同的,在 JDK 1.7 时,HashMap 底层是通过数组 + 链表实现的:而在 JDK 1.8 时,HashMap 底层是通过数组 + 链表或红黑 ...

  9. Kubernetes(k8s)一次性任务:Job

    目录 一.系统环境 二.前言 三.Kubernetes Job简介 四.创建一次性任务job 4.1 创建一个简单任务的job 4.2 创建需要执行多次的job任务 五.测试job失败重试次数 六.j ...

  10. Linux 中 3 个文件打包上传和下载相关命令详解

    tar 命令 通过 SSH 访问服务器,难免会要用到压缩,解压缩,打包,解包等,这时候tar 命令就是必不可少的一个功能强大的工具.Linux 中最流行的tar是麻雀虽小,五脏俱全,功能强大. 使用t ...