Как я могу получить доступ к переменной класса из метода JS - PullRequest
4 голосов
/ 14 марта 2019

Я новичок в javascript и пытаюсь создать простой класс с некоторым методом, но у меня есть проблема, и я не могу понять, что я делаю плохо.

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']);
    };
}

Здесь, когда я пытаюсь войти в консоль spotifyApi.redirectUri, я получаю неопределенное значение (пробовал с ключевым словом this и без него).

Ответы [ 2 ]

3 голосов
/ 14 марта 2019

Это потому, что ваша библиотека (https://github.com/thelinmichael/spotify-web-api-node) использует redirectUri в качестве опции при ее создании, но не предоставляет ее в качестве атрибута.

Если вам все еще это нужно, поместите redirectUri в атрибут класса с чем-то вроде этого:

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();

Я отредактировал свой ответ с некоторыми хорошими практиками (добавив аргументы конструктора, используя this, ...)

2 голосов
/ 14 марта 2019

Неверный способ доступа к объектам. Посмотрите на приведенный ниже код и вывод.

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();

Выход:

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

Также вы не передали правильные параметры для createAuthorizeURL. Взгляните на signautre abouve и на spotify-web-api-node

...