Как передать пользовательский ввод с сервера узла на внешний вызов API? - PullRequest
0 голосов
/ 21 октября 2019

Я пытаюсь 1) взять пользовательский ввод из формы React 2) передать его на сервер node.js 3) затем во внешний API поиск результатов. 1 и 2 работают нормально, но я не могу понять № 3. Как я могу структурировать свой код так, чтобы я мог передать результаты пользовательского запроса ввода / вывода в этот вызов?

return spotifyApi.getArtistTopTracks('user input', 'US');

server.js

const server = express();
const router = express.Router();
const cors = require('cors');
const bodyParser = require('body-parser');
const logger = require('morgan');
const helmet = require('helmet');
const SpotifyWebApi = require('spotify-web-api-node');
const port = process.env.PORT || 5000;

server.use(logger('dev'));
server.use(cors());
server.use(bodyParser.urlencoded({ extended: false }));
server.use(bodyParser.json());
server.use(helmet())
server.listen(port, () => console.log(`Listening on port ${port}`))
module.exports = server;

var urlencodedParser = bodyParser.urlencoded({ extended: false })

server.get('/search', function (req, res) {
  res.send({query: req.query})
})

server.post('/search', urlencodedParser, function (req, res) {
  console.log(req.body)
  res.send({query: req.query})

})

  let credentials = {
      clientId: 'clientId',
      clientSecret: 'clientSecret',
      redirectUri: 'http://localhost:5000/callback'
  }

  let spotifyApi = new SpotifyWebApi(credentials);

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

    spotifyApi.setAccessToken(data.body['access_token']);

      return spotifyApi.getArtistTopTracks('4TMHGUX5WI7OOm53PqSDAT', 'US');
    })

    .then(function(data) {
      server.get('/tracks', (req, res) => {
          res.send(data.body);
      })
      console.log('The most popular tracks are:');
      let ids = data.body.tracks.map(track => track.id);
      console.log(ids)

      return spotifyApi.getAudioFeaturesForTracks(ids)
      .then(function(data) {

        server.get('/tracks/audio_features', (req, res) => {
            res.send(data.body);
        })
        console.log(data.body);
      }, function(err) {
        done(err);
      })
    }),
    function(err) {
      console.log('Something went wrong!', err);
    }```


1 Ответ

1 голос
/ 21 октября 2019

Вы можете попробовать этот пример и сказать результат?

server.post("/search", urlencodedParser, async function(req, res) {
  console.log("body: ", req.body);
  console.log("query: ", req.query);

  try {
    let credentials = {
      clientId: "clientId",
      clientSecret: "clientSecret",
      redirectUri: "http://localhost:5000/callback"
    };

    let spotifyApi = new SpotifyWebApi(credentials);

    const grandtObject = await spotifyApi.clientCredentialsGrant();

    spotifyApi.setAccessToken(grandtObject.body["access_token"]);

    const response = await spotifyApi.getArtistTopTracks(
      "4TMHGUX5WI7OOm53PqSDAT", // can be changed according to the req.query for example req.query.id
      "US"
    );

    console.log(response);

    res.send({ tracks: response.body });
  } catch (err) {
    console.log(err);
    res.status(500).send("something went bad");
  }
});



...