经过身份验证,可以搜索艺术家的热门曲目并创建播放列表,但是在将曲目添加到播放列表时会失去身份验证

时间:2018-11-10 06:09:34

标签: javascript axios spotify

抱歉,标题令人困惑。我正在开发一个项目,该项目将一些艺术家的前5首歌曲汇总到一个用户的播放列表中。在该过程的最后一步,我遇到了障碍,被困住了。

我的访问令牌在搜索艺术家的前五首曲目时有效,而在创建播放列表时有效。我可以验证是否收到曲目Spotify ID,并查看播放列表是在我的Spotify应用上创建的,但是当我尝试将曲目添加到播放列表时出现了401错误。

我正在使用passport-spotify进行身份验证,并且范围设置为[“用户读取私有,播放列表修改私有,播放列表修改公开”]。

由于我可能会根据艺术家的数量向播放列表中添加大量歌曲,因此我将歌曲uris传递到axios请求的主体中。这是adding tracks to a playlist的文档。

我可以在错误对象中验证访问令牌和uri是否正在传递到后调用中。

我将在下面发布有关addTracks axios调用的代码,并且我也非常乐意在错误对象中共享信息。如果您想查看身份验证代码,我也会将其发布。

感谢您的光临!

const addTracks = (req, res) => {
  let chunk = 100;
  let result = [];

  console.log('FINAL TRACKS: ', finalTracks);
  console.log('addTracks REQ.BODY: ', req.body);
  console.log('addTracks REQ.USER: ', req.user);

  for (let i = 0; i < finalTracks.length; i += chunk) {
    result.push(finalTracks.slice(i, i + chunk));
    console.log('result: ', result);
  }

  result.map(chunkArr => {
    axios
      .post(
        `https://api.spotify.com/v1/playlists/${req.body.playlist.id}/tracks`,
        {
          headers: {
            Authorization: `Bearer ${req.user.accessToken}`,
            'Content-Type': 'application/json'
          }
        },
        {
          body: {
            uris: JSON.stringify(chunkArr)
          }
        }
      )
      .then(resp => {
        // console.log(resp);
        // res.status(200).json(resp);
        console.log('awaiting promise resolution');
      })
      .catch(err => console.log('addTracks > result.map catch: ', err));
  });
};

1 个答案:

答案 0 :(得分:0)

uris的语法不正确。

解决方案:

  result.map(chunkArr => {
    axios
      .post(
        `https://api.spotify.com/v1/playlists/${req.body.playlist.id}/tracks`,
        {
            uris: chunkArr
        },
        {
          headers: {
            Accept: 'application/json',
            'Content-Type': 'application/json',
            Authorization: `Bearer ${req.user.accessToken}`
          }
        }
      )