Je suis nouveau dans javascript et j'essaie de créer une classe simple avec une méthode, mais j'ai un problème et je ne peux pas comprendre ce que je fais mal.

var SpotifyWebApi = require('spotify-web-api-node');

const my_client_id = "xxx";
const my_secret = "xxx";

class Spotify {
    constructor() {
         this.spotifyApi = new SpotifyWebApi({
            redirectUri: 'http://localhost:8081/spotifyCallback',
            clientId: my_client_id,
            clientSecret: my_secret
        }); 
    }

    connect() {
        console.log(this.spotifyApi.redirectUri);
        return spotifyApi.createAuthorizeURL('teststate', ['user-read-private', 'user-read-email']);
    };
}

Ici, lorsque j'essaie de me connecter à la console spotifyApi.redirectUri, je reçois undefined (essayé avec et sans le mot clé this).

4
HLupo 14 mars 2019 à 11:30

2 réponses

Meilleure réponse

La façon dont vous accédez aux objets est incorrecte. Regardez ci-dessous le code et la sortie.

const SpotifyWebApi = require('spotify-web-api-node');
const my_client_id = "xxx";
const my_secret = 'xxx';
const redirectUri='http://localhost:8081/spotifyCallback';

    class Spotify {       
        constructor(my_client_id, my_secret, redirectUri) {
            this.spotifyApi = new SpotifyWebApi({
                clientId: my_client_id,
                clientSecret: my_secret,
                redirectUri: redirectUri
            });
        }        
        connect() {
            console.log(JSON.stringify(spotify.spotifyApi._credentials,null,4));
            console.log(this.spotifyApi._credentials.redirectUri);       
            return this.spotifyApi.createAuthorizeURL(['user-read-private', 'user-read-email'],'teststate');
        };
    }

    //Instantiate
    const spotify = new Spotify(my_client_id, my_secret ,redirectUri);
    const connectObject = spotify.connect();

Production:

    {
    "clientId": "xxx",
    "clientSecret": "xxx",
    "redirectUri": "http://localhost:8081/spotifyCallback"
    }
    http://localhost:8081/spotifyCallback

De plus, vous n'avez pas transmis les paramètres corrects pour createAuthorizeURL . Jetez un œil à signautre ci-dessus et à spotify-web-api-node

2
Sohan 14 mars 2019 à 09:41

C'est parce que votre lib (https://github.com/thelinmichael/spotify-web- api-node) utilise redirectUri comme option lors de son instanciation, mais ne l'expose pas en tant qu'attribut.

Si vous en avez toujours besoin, mettez redirectUri dans un attribut de classe avec quelque chose comme ceci :

const SpotifyWebApi = require('spotify-web-api-node');

class Spotify {
    constructor(my_client_id, my_secret) {
         this.redirectUri = 'http://localhost:8081/spotifyCallback';
         this.spotifyApi = new SpotifyWebApi({
            redirectUri: this.redirectUri,
            clientId: my_client_id,
            clientSecret: my_secret
        }); 
    }

    connect() {
        console.log(this.redirectUri);
        return this.spotifyApi.createAuthorizeURL('teststate', ['user-read-private', 'user-read-email']);
    };
}

const my_client_id = "xxx";
const my_secret = "xxx";

// Now you can instantiate your class with this :
const spotify = new Spotify(my_client_id, my_secret);
const yourToken = spotify.connect();

J'ai modifié ma réponse avec quelques bonnes pratiques (ajout d'arguments de constructeur, utilisation de this,...)

3
Seblor 14 mars 2019 à 08:44