简体   繁体   中英

node.js https get request

I am trying to make an http request in my backend node.js web app. I can make sucesfull http requests on front end web javascript files like this:

            $.ajax({
                url: `https://api.spotify.com/v1/artists/${artistId}/albums`,
                type: 'GET',
                contentType: 'application/json',
                headers: {
                    'Authorization': 'Bearer ' + globalAccesToken,
                },
                data: {
                    offset: offset,
                }
            }).done(function callback(response) {
           
                    resolve(response.items)
               
            }).fail(async function (error) {
getArtistAlbums(artistId, offset, onlyReturnTracks))
            });

And from following this guide:https://nodejs.dev/learn/make-an-http-post-request-using-nodejs

I have been trying to make the same request in node.js backend:

    //get access token
    let accessToken = await spotifyAuth.getAccessToken();
    
    //create data
    const data = JSON.stringify({
      offset: 0,
    })

    //create options data obj
    const options = {
      hostname: 'https://api.spotify.com',
      path: '/v1/artists/1XqqyIQYMonHgllb1uysL3/albums',

      //url: 'https://api.spotify.com/v1/artists/1XqqyIQYMonHgllb1uysL3/albums',
      method: 'GET',
      headers: {
        'Authorization': 'Bearer ' + accessToken,
      },
    }

    const req = https.request(options, res => {
      console.log(`proxyiprequest() statusCode: ${res.statusCode}`)
      res.on('data', d => {
        process.stdout.write(d)
      })
    })
    
    req.on('error', error => {
      console.error('proxyiprequest() err=', error)
    })
    
    req.write(data)
    req.end()

But running the above request ends in this err:

proxyiprequest() err= { Error: getaddrinfo ENOTFOUND https://api.spotify.com https://api.spotify.com:443
    at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:56:26)
  errno: 'ENOTFOUND',
  code: 'ENOTFOUND',
  syscall: 'getaddrinfo',
  hostname: 'https://api.spotify.com',
  host: 'https://api.spotify.com',
  port: 443 }

Am I doing something wrong with how I have set up my url/path settings?

Node https module have a separate option named protocol . So in the request option, you should not include https:// or http:// .

Your options variable will become:

const options = {
  hostname: 'api.spotify.com',
  path: '/v1/artists/1XqqyIQYMonHgllb1uysL3/albums',
  method: 'GET',
  headers: {
    'Authorization': 'Bearer ' + accessToken,
  },
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM