如何处理Mapbox Matching API返回的不可处理实体错误
问题原因
- Mapbox Matching API本身对驾车模式下的匹配路线总长度有限制,默认最大支持100公里的轨迹匹配,当两个坐标点距离超过该阈值时,API会直接返回
TooLarge错误,部分场景下甚至会直接返回400/413类的HTTP状态码错误,不会走到正常的业务返回体逻辑。 - 你现有的代码只处理了请求成功后返回体的
code字段校验,没有捕获异步请求本身抛出的异常:当请求触发HTTP层面的错误时,await后的语句会直接抛出Promise rejection,你的代码没有捕获该类异常,因此无法检测到问题。
修复方案
首先给异步请求增加try-catch块捕获全局异常,其次补全所有相关错误码的处理逻辑,修改后的代码如下:
try { const { body } = await MapboxMatchingClient.getMatch(matchOptions).send() if (body.code !== 'Ok') { console.error('Matching failed!') console.error('error code: ' + body.code) if (body.message) { console.error(body.message) } // 专门处理距离过远的错误 if (body.code === 'TooLarge') { console.error('错误原因:两个坐标点距离过远,超过Mapbox Matching API最大支持的匹配长度') // 此处可添加自定义业务逻辑,比如提示用户缩小点位选择范围 } } else { // 正常业务逻辑 } } catch (err) { // 捕获请求层面的错误,包括网络错误、HTTP 4xx/5xx错误等 console.error('请求发生异常:', err) // 解析状态码判断是否为距离超限导致的请求错误 if (err.statusCode === 413 || err.statusCode === 400) { console.error('错误原因:坐标点距离过远,请求被API拒绝') } }
补充优化建议:可以在调用API之前先计算两个坐标点的直线距离,提前过滤超过100公里的请求,减少无效API调用的同时也能提前给用户反馈。
内容的提问来源于stack exchange,提问作者GNG
相关产品推荐
相关产品推荐

