如何在服务器端使用Node.js而非浏览器在Javascript上运行函数?

时间:2019-02-18 11:02:34

标签: javascript node.js vue.js npm spotify

我正在尝试使用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。目的是允许用户在几秒钟内输入songartisttime,然后将搜索请求发送到Spotify Web API以获取有关歌曲的信息。这将为我提供歌曲的长度,然后我将计算出在用户指定的time中可以收听该歌曲多少次。

我的关键问题:如何使用Node.js在服务器端运行代码?我不知道从这里开始。

0 个答案:

没有答案