Просто интересно, может ли кто-нибудь обнаружить в этом коде проблему, которая вызвала бы несанкционированную ошибку 401?
У меня есть несколько похожих функций, все прекрасно работают, записываются в GET-данные (используя ax ios) через веб-API Spotify, но по какой-то причине мой запрос PUT выдает ошибку.
Вот соответствующая документация Spotify для этой конечной точки.
В основном данные отправляются в сервер от клиента в виде массива JSON объектов с подробной информацией о дорожках, которые я хотел бы сохранить в авторизованной учетной записи Spotify, вместе с действительным токеном доступа в качестве параметра. Я знаю, что токен действителен, потому что я собираю данные учетной записи пользователя через другой GET непосредственно перед этим шагом. И я знаю, что URL объединяется правильно, потому что он печатается в деталях ошибки:
https://api.spotify.com/v1/me/tracks?ids=5xDyeaAwdQROKqXxkGeMin%2C1Hli68AYjHPUvtF9bkr0Pe%2C2lId1EsB3LrE8rGYSBuUCy%2C0GuaEFOi9JIggdVpJulBRf%2C1ikymkBwiyQpTshPiddgRC%2C7aboHXhiWEtwft9TMAFWoK%2C3ipalmig9WXTT8KTy17OJ0%2C1twjROI1HSU0LMgP391g5l%2C0iKqQUmVOy2PEMGVhT6jBj%2C3ImgAYVk1pOeih6iFaAa0N%2C0pRzr7f2z9zHr8oqJ4Hchx%2C2racu4ScxU1gVtdpvRfUP9%2C3uoR6wF45u1W3uqAQpswg4%2C564LOaf2QQQtz2faWgWFys%2C0sO5cHkWVlwD9gv5aq1OjV%2C3WfRxX5uM7RfgqLnzftK0g%2C3yTMJDbmXKfZi0OW2g4193%2C0CdaMDNIfgQu0wR5jnXnb3%2C48ovG2U4PQPHVEosDR7lrs%2C1arM2HxLWtsCSImxVgYAzf%2C6gOl5JmXB8vUrMHo2BeeKb%2C53fBgckGdEXTQ2YhvdlGjZ%2C3tioypT6P9clCNTmThWqBL%2C2CPupwTdC35SCXCbALD7MY%2C7dKeVDydH4yqEzVNx6hui9%2C2rpJtmeLU52N5WbR7BLfUX%2C0PrZsr6FIiBu3p8uJrbFjg%2C57yUjPDCY10YUcXLhUFY4F%2C3eEe37Y0ecng4dD8awUnA7%2C0IAF0KIM3Cnp7WhOVJfFuS%2C600rxqKGJUS6gMD5klZj5l%2C24ZZPWkt2ELVI26tpiZZ1K%2C69shxYcOeyQiMJDIVlHZGE%2C6CoD3wMYARMmkjaaxiWJmZ%2C1TpTmnDAIMxvH7xIFx0zxG%2C33eI5sAdWvSGrAMW7DzWIB%2C6W9lfjN0fuvGW4nEqR9WKe%2C6kxVzbsyvnckVOIzrXrXMR%2C3I32EQp0LdVuQixucRuzq0%2C5cBR3cFJReCbjSBOarnysu%2C7zfgnI2IzmkNhQWkg1LK0u%2C5TuQeDUDFHWRFAOp8dEsn0%2C1qbcfwtK2ZhaKPnkuNdDvQ%2C5IHSXDJh9vwY9JYK39CPUx%2C3QKMflLzzaURXEcxqDXS2q%2C46Pz8LnBjGFdu19VyCPeRn%2C5rYbEHPNqqFeGQGvaw5Z0k%2C00ULB3uUHt2sR2NVkhbr59%2C0NWr0JWZmAM9A2U1U5cAn4%2C6bhWSSAQjThmnJqp2aFnaW
Любая помощь высоко ценится!
app.put("/migration-data/put/:token", async (req, res) => { console.log(`Migrating data to new account using token ${req.params.token.substring(0, 4)}...\n`); const toClientPutData = await putData(req.params.token, req.body); res.json(toClientPutData); }); const putData = async (token, data) => { const putResults = {}; const spotifyAPI_PutTracks = async (trackData, index=0) => { try { const recurse = ((trackData.length - 1) - (index + 50)) > 0; const offset = recurse ? 49 : (trackData.length - index) - 1; var tracksThisQuery = ""; for (var i = index; i < (index + offset); i++) { tracksThisQuery+=`${trackData[i].id}%2C` } tracksThisQuery+=`${trackData[(index + offset)].id}` const puttingTracks = await axios.put( `https://api.spotify.com/v1/me/tracks?ids=${tracksThisQuery}`, { headers: { Authorization: `Bearer ${token}` } } ); if (recurse) { return spotifyAPI_PutTracks(trackData, index+=50); } return puttingTracks.data; } catch (apiError) { console.log(apiError); } } const { user, savedTracks, savedAlbums, following, playlists } = data; if (token) { // put tracks const putTracksData = await spotifyAPI_PutTracks(savedTracks); putResults["putTracks"] = putTracksData; } return putResults; }
Разобрался - PUT ожидает дополнительный параметр данных после URL-адреса, но перед заголовками. Я просто вставил пустой литерал объекта во второй слот параметра, и мы отправились в гонку.