我正在尝试使用spotify-web-api-node包运行对Spotify API的调用。要运行某些API调用,我需要使用函数spotifyApi.clientCredentialsGrant()
设置我的凭据。但是,每当我从Vue应用程序的脚本标签调用此函数时,都会导致错误:Uncaught TypeError: spotifyApi.clientCredentialsGrant is not a function
。
根据this issue on the spotify-web-api-node Github,这是有意的。他们不希望人们使用公开给客户端的Javascript设置凭据,而是需要在服务器端运行请求。因此,仅当使用来自节点的代码时,spotify-web-api-node库才公开此功能。
虽然可以解释原因,但我仍然真的不知道如何解决该问题。我应该如何从节点运行代码?如何将其移出公开的Javascript代码,以便可以访问clientCredentialsGrant
函数?我不是经验丰富的Node或Javascript开发人员,因此请详细说明。
下面的代码是针对我正在运行对Spotify API的调用的Vue组件的。 Uncaught TypeError
来自spotifyApi.clientCredentialsGrant().then()
标签开头的承诺<script>
。
<template>
<section>
<b-field>
<button class="button is-light is-outlined is-large" @click="open">
<p class="btn-txt">Calculate!</p>
</button>
</b-field>
<b-loading :is-full-page="true" :active.sync="isLoading" :can-cancel="true"></b-loading>
</section>
</template>
<script>
import SpotifyWebApi from "spotify-web-api-node";
var spotifyApi = new SpotifyWebApi({
clientId: "5fc39d2ee8144af88b66c4da4cf6a6a0",
clientSecret: "a0722cde44f844289035b12279e26f41"
});
// Retrieve an access token.
console.log("The client ID is " + spotifyApi.getClientId());
console.log("The client secret is " + spotifyApi.getClientSecret());
spotifyApi.clientCredentialsGrant().then(
function(data) {
console.log("The access token expires in " + data.body["expires_in"]);
console.log("The access token is " + data.body["access_token"]);
// Save the access token so that it's used in future calls
spotifyApi.setAccessToken(data.body["access_token"]);
},
function(err) {
console.log(
"Something went wrong when retrieving an access token",
err.message
);
}
);
// Get Elvis' albums
// Search tracks whose artist's name contains 'Kendrick Lamar', and track name contains 'Alright'
spotifyApi.searchTracks("track:Alright artist:Kendrick Lamar").then(
function(data) {
console.log(
'Search tracks by "Alright" in the track name and "Kendrick Lamar" in the artist name',
data.body
);
},
function(err) {
console.log("Something went wrong!", err);
}
);
export default {
data() {
return {
isFullPage: true
};
},
methods: {
open() {
const loadingComponent = this.$loading.open({
container: this.isFullPage ? null : this.$refs.element.$el
});
setTimeout(() => loadingComponent.close(), 3 * 1000);
}
}
};
</script>
如果有帮助,这里是Github repo for my little Vue web app。目的是允许用户在几秒钟内输入song
,artist
和time
,然后将搜索请求发送到Spotify Web API以获取有关歌曲的信息。这将为我提供歌曲的长度,然后我将计算出在用户指定的time
中可以收听该歌曲多少次。
我的关键问题:如何使用Node.js在服务器端运行代码?我不知道从这里开始。