Reputation: 43
I'm trying 1) to take user input from a React form 2) pass it to a node.js server 3) then into an external API search for results. 1 & 2 are working fine but I can't figure out #3. How can I structure my code so that I can pass the results of the user input/post request into this call?
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);
}```
Upvotes: 0
Views: 603
Reputation: 17888
can you try this example and say the result?
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");
}
});
Upvotes: 1