Есть ли возможность запустить данный код в браузере?

Рейтинг: 0Ответов: 1Опубликовано: 30.01.2023

Здрасте, а есть ли возможность провернуть такое в браузере

const axios = require('axios');
const cheerio = require("cheerio");
var day, temp, weather, when;

const parse = async () => {
  const getHTML = async (url) => {
    const { data } = await axios.get(url);

    return cheerio.load(data);
  };

  const $ = await getHTML("https://ru-meteo.ru/chelyabinsk");
  when = $("div.dt")
    .first()
    .contents()
    .filter(function () {
      return this.type === "text";
    })
    .text();
  day = $("div.dt big").eq(0).text();
  temp = $("div.wtr big").eq(0).text();
  weather = $("div.wtr p").eq(0).text();
};

parse();

Код парсит с сайта погоду, полученные данные я хочу вывести на html страницу, но если данный скрипт подключать к html, то выводит ошибку Uncaught ReferenceError: require is not defined, как быть? Или это возможно только в node.js? На чистом js такое не получится?

Ответы

▲ 0

Такая возможность есть. Только код придётся писать совсем иначе. Подключение библиотек будет не через require, а через тэг script, также будут проблемы с синхронным выполнением кода, так как браузер сам будет определять какой файл быстрее подключить. Вот пример, который выведет ваш город с которого вы откроете страницу через 5 секунд.

И да, с вашим сайтом это скорее всего не сработает. Политика браузера CORS (Cross-Origin Resource Sharing) такова, что не позволит считывать данные с HTTPS, если сам владелец хоста это не разрешит в настройках своего сервера. Поэтому в моём предоставленном примере используется протокол HTTP.

<html>
  <head>
    <title>Example</title>
  </head>
  <body>
    <script>
      setTimeout(async () => {
        const data = await axios.get('http://ip-api.com/json');
        document.body.innerHTML = data.data.city;
      }, 5000);
    </script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/axios/1.2.1/axios.min.js"></script>
  </body>
</html>