Как запустить функцию на стороне сервера с Node.js вместо стороны браузера с Javascript? - PullRequest
0 голосов
/ 18 февраля 2019

Я пытаюсь выполнить вызов API Spotify с помощью пакета spotify-web-api-node.Чтобы выполнить определенные вызовы API, мне нужно установить свои учетные данные с помощью функции spotifyApi.clientCredentialsGrant().Но всякий раз, когда я вызываю эту функцию из тега script моего приложения Vue, это приводит к ошибке: Uncaught TypeError: spotifyApi.clientCredentialsGrant is not a function.

Согласно эта проблема на Gitub-узле spotify-web-api-github предназначена именно для этого.Они не хотят, чтобы люди устанавливали учетные данные, используя Javascript, который предоставляется клиенту, и вместо этого запрос должен выполняться на стороне сервера.Таким образом, библиотека spotify-web-api-node предоставляет эту функцию только при использовании кода с узла.

Хотя это и объясняет, почему, я до сих пор не знаю, как решить проблему.Как мне запустить код с узла?Как я могу переместить его из открытого кода Javascript, чтобы у меня был доступ к функции clientCredentialsGrant?Я не опытный разработчик Node или Javascript, поэтому, пожалуйста, объясните подробно.

Код ниже предназначен для компонента Vue, где я выполняю вызовы API Spotify.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 для моего маленького веб-приложения Vue .Цель состоит в том, чтобы позволить пользователю ввести song, artist и time в секундах, а затем отправить запрос поиска в веб-API Spotify, чтобы получить информацию о песне.Это даст мне длину песни, а затем я вычислю, сколько раз можно слушать эту песню в пределах указанного пользователем time.

Мой ключевой вопрос : как запустить код со стороны сервера с Node.js?Я не знаю, как начать здесь.

...