#reactjs #react-native #api #axios #spotify
#reactjs #react-native #API #axios #spotify
Вопрос:
Код работает отлично, если ссылка API для получения сведений о треке используется как ‘https://api.spotify.com/v1/tracks/3LgWsmilsrWXiPYQFRD0T7 «.
Но если мы начнем давать динамическую ссылку, например ‘https://api.spotify.com/v1/tracks /’ id используя useParams для получения идентификатора из URL, тогда статус, который я получаю, равен 401 status.
const Spotify = (props) => {
const Params = useParams();
const {id} = Params;
const classes = useStyles();
const spotify = Credentials();
const [token, setToken] = useState();
const [image, setImage] = useState();
const [name, setName] = useState();
const [artists, setArtists] = useState();
useEffect(() => {
axios('https://accounts.spotify.com/api/token', {
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
'Authorization': 'Basic ' btoa(spotify.ClientId ':' spotify.ClientSecret)
},
data: 'grant_type=client_credentials',
method: 'POST'
})
.then(tokenResponse => {
console.log(tokenResponse.data)
const res = tokenResponse.data.access_token;
setToken(res)
console.log(token)
const url = 'https://api.spotify.com/v1/tracks/' id;
axios(url,{
method: 'GET',
headers: { 'Authorization': 'Bearer ' token }
}).then(dat => {
console.log(token)
const Name = dat.data.name;
setName(Name);
const image = dat.data.album.images[0].url;
setImage(image);
const artist = dat.data.artists;
var artiststring = '';
artist amp;amp; artist.map((art)=>{
const {name,id} = art;
artiststring = name ', ';
})
const editedartist = artiststring.slice(0,-2);
setArtists(editedartist)
console.log(artiststring)
console.log(dat.data.artists)
})
})
return () => {
}
}, [Params,spotify.ClientSecret,spotify.ClientId])
return (
<div className={classes.root}>
<Grid container spacing={3}>
<Grid item xs={4}>
<img src={image} className={classes.customizeImage} />
</Grid>
<Grid item xs={8} className={classes.customizeDetails}>
<Grid container>
<Grid item xs={12}>{name}</Grid>
<Grid item xs={12}>
<div style={{fontSize: '13px',color: 'inherit'}}>{artists}</div>
</Grid>
</Grid>
</Grid>
</Grid>
</div>
)
}
export default Spotify;```
Комментарии:
1. где вы хранили свой токен?
Ответ №1:
Может быть, попробуйте вызвать ваш URL-адрес следующим образом:
const url = `https://api.spotify.com/v1/tracks/${id}`;
также создайте console.log(id) перед вызовом, чтобы гарантировать, что идентификатор доступен.
Комментарии:
1. console.log(id) выдает правильный результат. Но указанный выше URL-адрес не работает.
2. Неперехваченный (в обещании) Ошибка: запрос не выполнен с кодом состояния 401
3. если я изменю URL, а затем немного изменю код (логически без изменений), и это даст идеальный результат. Но если я только изменю URL. он выдаст код состояния 401 из-за того, что токен недействителен.