6

I am trying to load a JSON file from a url in google cloud. I am using the node-fetch package and it works fine for a couple of hours. The problem is that google changes the redirected url frequently. How can I make a get request to the url I will be forwarded to? Or at least know what url I will be forwarded to? I see there is also a package called request, but its deprecated.

This is the code

var express = require('express');
var router = express.Router();
var fetch = require('node-fetch');

router.get('/', async (req, res) => {
  
  const url = 'https://storage.cloud.google.com/blablabla/config.json';

  fetch(url)
    .then((res) => {
      if (res.ok) {
        return res.json();
      }
    })
    .then((data) => res.send({ data }))
    .catch((err) => res.send(err));
});

module.exports = router;
ce-loco
  • 262
  • 4
  • 10
  • I abandoned this approach and saved this json file locally since its pretty tiny. I suppose thr0n's answer would work! – ce-loco Sep 08 '20 at 20:38
  • 1
    node-fetch follows redirects by default (https://github.com/node-fetch/node-fetch#options). Note, you are overwriting 'res' as set by router with the fetch response. 'res' – dwright Dec 05 '20 at 23:09

2 Answers2

2

You can look up the final URL in the response headers. In your case res.headers.get('location') should do the trick.

thr0n
  • 21
  • 4
2

The Response object has an undocumented url property. So, let's say you call

const response = await fetch(url, {
    redirect: 'follow',
    follow: 10,
});

response.url will be the URL of the last redirect that was followed.

Dmitry Minkovsky
  • 36,185
  • 26
  • 116
  • 160