将“curl”查询转换为“axios”

问题描述 投票:0回答:1

我正在尝试调用 Spotify API,它与 curl 配合使用效果很好,但是当我尝试在 NestJS 应用程序中使用 axios 执行此操作时,出现错误。

这是可以运行并返回我的访问令牌的“curl”命令:

curl -X "POST" "https://accounts.spotify.com/api/token" \
-d "grant_type=authorization_code" \
-d "code={MY_AUTHORIZATION_CODE}" \
-d "redirect_uri={MY_REDIRECT_URI}" \
-d "client_id={MY_CLIENT_ID}" \
-d "client_secret={MY_CLIENT_SECRET}" \
-d "scope=user-library-read"


response : 
{"access_token":"{MY_ACCESS_TOKEN}","token_type":"Bearer","expires_in":3600,"refresh_token":"{MY_REFRESH_TOKEN}","scope":"user-library-read"}

我尝试将其转换为像这样的 axios 请求:

  @Get('liked-songs')
  async getLikedSongs(@Query('code') code: string) {
    console.log('code : ', code);
    let accessToken;
    const CLIENT_ID = '{MY_CLIENT_ID}';
    const CLIENT_SECRET = '{MY_CLIENT_SECRET}';
    const REDIRECT_URI = '{MY_REDIRECT_URI}';

    const requestBody = {
      grant_type: 'authorization_code',
      code: code,
      redirect_uri: REDIRECT_URI,
      client_id: CLIENT_ID,
      client_secret: CLIENT_SECRET,
      scope: 'user-library-read',
    };

    axios
      .post('https://accounts.spotify.com/api/token', requestBody)
      .then((response) => {
        console.log('Access token:', response.data.access_token);
        accessToken = response.data.access_token;
      })
      .catch((error) => {
        console.error('Error fetching access token:', error);
      });
  }

所以我的代码正确显示在我的控制台中,但我有这个错误:

Error fetching access token: AxiosError: Request failed with status code 415
at settle (/app/node_modules/axios/lib/core/settle.js:19:12)
at IncomingMessage.handleStreamEnd (/app/node_modules/axios/lib/adapters/http.js:585:11)
at IncomingMessage.emit (node:events:531:35)
at endReadableNT (node:internal/streams/readable:1696:12)
at processTicksAndRejections (node:internal/process/task_queues:82:21) {
code: 'ERR_BAD_REQUEST',


[Nest] 40  - 12/22/2023, 2:53:44 PM   ERROR [ExceptionsHandler] Request failed with status code 401
AxiosError: Request failed with status code 401

如果您希望我提供有关错误的更多信息,请告诉我

curl axios nestjs spotify
1个回答
0
投票

看看你的卷发,我想你可以这样做。

const requestData = {
   grant_type: 'authorization_code',
   code: code,
   redirect_uri: REDIRECT_URI,
   client_id: CLIENT_ID,
   client_secret: CLIENT_SECRET,
   scope: 'user-library-read',
};

axios.post('https://accounts.spotify.com/api/token', null, {
  params: requestData,
  headers: {
    'Content-Type': 'application/x-www-form-urlencoded'
  }
})
.then(response => {
  console.log('Access token:', response.data.access_token);
  accessToken = response.data.access_token;
})
.catch(error => {
  console.error('Error fetching access token:', error);
})
© www.soinside.com 2019 - 2024. All rights reserved.