Как получить JSON-файл на стороне сервера

Пытаюсь получить json-файл и распарсить его в объект:

app.get('/', (req, res) => {
    res.render('index', {
        exchange_rates: {
            BTC: JSON.parse('https://blockchain.info/ru/ticker')
        }
    });
});

и получаю ошибку:

SyntaxError: Unexpected token h in JSON at position 1

Обычно на стороне браузера я делаю AJAX-запрос, но это сервер. Как можно получить доступ к JSON-файлу?


Ответы (1 шт):

Автор решения: Максим Вишневский

Проблема в этой строке BTC: JSON.parse('https://blockchain.info/ru/ticker'), вы пытаетесь распарсить не данные с удаленного ресурса, а строку 'https://blockchain.info/ru/ticker', JSON.parse так не умеет, вам нужно предварительно получить данные, например при помощи fetch (в вашем случае node-fetch), примерно так:

// запрашиваем данные при помощи fetch
app.get('/', (req, res) => fetch('https://blockchain.info/ru/ticker')
  .then((response) => response.json()) // парсим json
  .then((json) => res.render('index', { // отдаем ваш response
    exchange_rates: {
      BTC: json,
    },
  })));

Или тоже самое, но при помощи async/await:

app.get('/', async (req, res) => {
  const response = await fetch('https://blockchain.info/ru/ticker');
  const json = await response.json();

  res.render('index', {
    exchange_rates: {
      BTC: json,
    },
  });
});
→ Ссылка