使用Axios调用Spotify Web API时随机出现500错误排查
问题描述
我有一个包含约35个元素的歌曲数组,结构如下:
const songs = [ { song_id: '09wkyp6dMAo5JakEj49R0M', artist_id: '5EmEZjq8eHEC6qFnT63Lza', }, { song_id: '2GaEPiwjVhSMrhX0zC5zJL', artist_id: '5EmEZjq8eHEC6qFnT63Lza' } ]
我通过for循环遍历每首歌,执行以下异步逻辑:
const assignSongsToPlaylists = async () => { for (let s of songs) { // 从MongoDB获取groupID const { connectedGroupId } = await Artist.findOne({ artistSpotifyId: s.artist_id, }) // 根据groupID查找对应的播放列表ID const { connectedPlaylistId } = await Group.findOne({ _id: connectedGroupId, }) // 将歌曲添加到指定播放列表 const response = await axios.post( `/playlists/${connectedPlaylistId}/tracks?uris=spotify%3Atrack%3A${s.song_id}`, ) } } const response = await assignSongsToPlaylists()
当前问题:这个操作有时能成功将所有歌曲添加到Spotify的单个或多个播放列表,但有时会在处理若干首歌后(比如5首或25首)随机失败,返回Axios 500错误。请问这种随机出现500错误的行为可能由什么原因导致?
可能的原因分析
- Spotify API隐性速率限制:Spotify API有明确的请求频次限制(返回429),但短时间内连续发起大量请求可能触发后端过载保护,返回非标准的500错误。即使是串行请求,35次连续POST也可能触碰到隐性的阈值。
- MongoDB查询返回异常:如果某次
Artist.findOne或Group.findOne未找到匹配数据,connectedGroupId或connectedPlaylistId会是undefined,导致生成无效的API请求URL,Spotify后端处理无效请求时返回500。这种情况的随机性取决于数组中是否存在无效的艺人数据。 - Spotify后端瞬时故障:Spotify服务可能存在节点负载波动或临时故障,刚好在某次请求时触发,导致500错误,属于偶发的服务端问题。
- 请求参数异常:极少数情况下,部分
song_id可能存在格式问题,或者URI编码出现错误,导致请求参数不符合Spotify的解析要求,后端处理失败返回500。 - 网络瞬时波动:客户端与Spotify服务器之间的网络出现中断、丢包等瞬时问题,导致请求不完整,后端无法正常处理返回500。
内容的提问来源于stack exchange,提问作者smoothlikebutter
相关产品推荐
相关产品推荐

