Структурирование класса для стороннего API с Node.js / ES6? - PullRequest
0 голосов
/ 18 ноября 2018

Я пытаюсь реструктурировать небольшое приложение, которое я создаю.Я использую API Spotify, и на данный момент у меня есть вся логика в одном файле, и я просто создаю там маршруты.Я хочу создать класс для SpotifyClient и другой класс для моего сервера, но я не уверен, что делать по этому поводу.У меня есть эти два маршрута специально для авторизации Spotify, которые я хочу удалить и поместить в класс:

app.get('/login', (req, res) => {
  const state = generateRandomString(16);
  res.cookie(STATE_KEY, state);
  res.redirect(spotifyApi.createAuthorizeURL(scopes, state));
});

app.get('/callback', (req, res) => {
  const { code, state } = req.query;
  const storedState = req.cookies ? req.cookies[STATE_KEY] : null;

  if (state === null || state !== storedState) {
    res.redirect('/#/error/state mismatch');
  } else {
    res.clearCookie(STATE_KEY);

    spotifyApi
      .authorizationCodeGrant(code)
      .then(data => {
        const expiresIn = data.body.expires_in;
        const accessToken = data.body.access_token;
        const refreshToken = data.body.refresh_token;

        // Set the access token on the API object to use it in later calls
        SPOTIFY_TOKEN = accessToken;
        spotifyApi.setAccessToken(accessToken);
        spotifyApi.setRefreshToken(refreshToken);

        spotifyApi.getMe().then(({ body }) => {
          SPOTIFY_ID = body.id;
        });

        res.redirect('/search');
      })
      .catch(err => {
        res.redirect('/#/error/invalid token');
      });
  }
});    

У меня есть ключи API, которые я экспортирую как переменные среды и сохраню их в объекте в config.js file.

Итак, начнем, будет что-то вроде этого:

const config = require('./config');

class SpotifyClient {


}

Но передам ли я ключи в своем конструкторе?Как бы я настроил маршруты?Должны ли они быть просто методами класса?

Буду признателен за любой совет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...