• Почему не работает код на node.js?

    vool
    @vool
    Разработчик
    Код действительно рабочий, значит проблемма в хостинге
    Ответ написан
    1 комментарий
  • Как создать файл объект JS?

    vool
    @vool
    Разработчик
    Считываете данные с файла с сервера, и скачиваете на комп
    var reader = new FileReader();
    reader.readAsDataURL(blob); 
    reader.onloadend = function() {
      var base64data = reader.result; 
      downloadFile(base64data, "application/pdf", "hello.pdf");
    }
    downloadFile(base64data, type, fileName) { 
          const file = window.btoa(base64data);
          const url = `data:${fileType};base64,` + file;
          let a = document.createElement('a');
          a.href = url;
          a.download = fileName;
          document.body.appendChild(a);
          a.click();
          document.body.removeChild(a);
          window.URL.revokeObjectURL(url);
    }

    Вы про это?
    Ответ написан
  • Как получить ширину элемента в пикселях с помощью js?

    vool
    @vool
    Разработчик
    window.getComputedStyle(document.querySelector("ваш елемент")).getPropertyValue("width");


    И советую вам для авто-ширины контента юзать не авто а fit-content
    Ответ написан
    1 комментарий
  • Почему не работает btoa('кириллица')?

    vool
    @vool
    Разработчик
    Кодируем:
    btoa(unescape(encodeURIComponent(`hello лолваоп`)))

    Выход:
    'aGVsbG8g0LvQvtC70LLQsNC+0L8='

    Декодируем:
    decodeURIComponent(escape(atob('aGVsbG8g0LvQvtC70LLQsNC+0L8=')))

    Выход:
    'hello лолваоп'
    Ответ написан
    Комментировать
  • Как в javascript добавить кнопку в push-уведомление?

    vool
    @vool
    Разработчик
    А в чём проблемма создать свой пуш?? Делаете на ноде сайт, прикручиваете сокеты в реальном времени и на сервере отправляете событие а на клиенте ловите - и создаёте свой пуш со всеми возможностями как вы хотите
    Ответ написан
    Комментировать
  • Как отслеживать закрытие вкладки в Node.js?

    vool
    @vool
    Разработчик
    Сразу вам скажу: на сервере ноды вы не сможете контролировать гугл-хранилища по типу sessionStorage, localStorage, а вот на клиенте на ванильном js можна отслеживать вкладку:
    let tab = window.open("url");
    let interval = setInterval(() => {
      if (tab.closed) {
          //Реализовуете выход когда вкладка закрыта
          clearInterval(interval);
      }
    }, 200);


    Правда, вам придётся каким то образом заставить пользователя оставить открытую вкладку которая проверяет другую
    Это вообще костыльный способ, проблемма в том что программист не может отследить закрытие текущей вкладки((

    Вот нашёл какое то решение(не проверял, но кажется что не будет всегда срабатывать):
    https://qna.habr.com/q/339145
    Ответ написан
    Комментировать
  • Как подключить библиотеку?

    vool
    @vool
    Разработчик
    Для того чтобы в Node.js использовать import перейдите в файл package.json и добавьте вот это:
    "type": "module"
    но тогда вы уже не сможете ымпортировать через require, только через import,

    и тогда ваш код(при "type": "module"):
    import chalk from 'chalk';

    Но если вы хотите через require и у вас странная ошибка
    require() of ES Module /node_modules/chalk/source/index.js from /src/index.js not supported.
    то мне помогло вот это:
    просто в том же package.json измените тип модуля на cjs, вот так:
    "type": "cjs"

    Тогда вы сможете импортировать либы через require
    Ответ написан
    Комментировать
  • Можно ли не дать совершиться нажатию PrtSC?

    vool
    @vool
    Разработчик
    Ну защитить от кнопки PrtScr действительно нельзя, НО есть решение для комбинации кнопок Win+PrtScr(сам написал и тестировал)
    решение я написал вот в этом вопросе: Ршение здесь
    Ответ написан
    Комментировать
  • Как защитить изображения от PrintScreen?

    vool
    @vool
    Разработчик
    А попробуйте такой код:
    window.onkeydown = (t) => {
      if (t.key == "Meta") {
        document.body.remove();
      }
    }


    конечно что вместо document.body.remove(); можно другое например при загрузке страници построить чёрный непрозрачный блок и в условие:
    if (t.key == "Meta") {
         //отобразить див и через несколько секунд его спятать
    }
    Ответ написан
    Комментировать
  • Почему выводит пустой цвет фона у элемента?

    vool
    @vool
    Разработчик
    А попробуйте так(это если цвет установили динамически):
    getComputedStyle(red, null).getPropertyValue("background-color")

    Ответ написан
    Комментировать
  • Как делают такие интерфейсы и навешивают события?

    vool
    @vool
    Разработчик
    Через target:

    <div class="menu">
      <span>item1</span>
      <span>item2</span>
      <span>item3</span>
    </div>

    document.querySelector(".menu").onclick = (ev) => {
       let elem = ev.target;
       if (elem.innerText == "item1") {
           alert(1);
       } else if (elem.innerText == "item2") {
           alert(2);
       } else if (elem.innerText == "item3") {
           alert(3);
       }
    }


    Надеюсь помог вам?
    Ответ написан
    Комментировать
  • Почему превью сайта не обновляется?

    vool
    @vool Автор вопроса
    Разработчик
    Вообщем, нашёл как обновить превью, мессенджеры хранят кэш преьюх сайтов, поэтому надо было просто в самом телеграмме обновить, для тех кто наткнётся на мой вопрос, вот решение которое мне помогло:
    откройте этого телеграм-бота: WebpageBot
    и отправьте ему ссылку на ваш сайт, и он обновит превью.
    Ответ написан
    Комментировать
  • Как с req вытащить User-Agent Node.js?

    vool
    @vool Автор вопроса
    Разработчик
    Извиняюсь за беспокойство, сам спросил - сам ответил))
    нашел как, просто написать так:
    req.headers["user-agent"]
    Ответ написан
    Комментировать
  • Как получить айпи юзера?

    vool
    @vool
    Разработчик
    На сервере:
    socket.on("text", (data) => {
        let myIp = socket.handshake.headers["x-forwarded-for"];
    });
    Ответ написан
    Комментировать
  • Как отправить писмо на почту в node js?

    vool
    @vool
    Разработчик
    Вы можете проще сделать:
    const nodemailer = require('nodemailer');
    const directTransport = require('nodemailer-direct-transport');
    const fromHost = `mail.my`;
    const from = 'Mail' + '@' + fromHost; //придумываете свою почту(может быть несуществующая)
    const to = prompt('Кому отправить: ').trim();
    const transport = nodemailer.createTransport(directTransport({
      name: fromHost
    }));
    transport.sendMail({
      from, to,
      subject: 'Заголовок письма',
      html: `
             <h1>Ваше письмо</h1>
            `
    }, (err, data) => {
      if (err) {
        console.error('Ошибка при отправке:', err);
      } else {
        console.log('Письмо отправлено');
      }
    });


    И всё, вот скрины как оно прийдёт:
    63c41169c0fea262627784.png

    63c411a4f2815663969723.png

    63c411c481f06517623203.png
    Ответ написан
    Комментировать
  • Как вытащить все значения из json через key?

    vool
    @vool
    Разработчик
    Вот код чтобы вывести ваши елементы:
    async function getResponse() {
        let response = await fetch('https://dummyjson.com/products') 
        let jsonList = await response.json()
        let list = document.querySelector('.products')
        let key
        let elements = jsonList.products
        elements = elements.splice(0, 3)
    
        for (key of elements) {
            list.innerHTML += 
            `<li class="item">
                <h5 class="small_panel">${key.title}</h5>
                    <div class="full_panel">
                        <img src="${key.thumbnail}" alt="${key.description}"></img>
                        <p>brand: ${key.brand}</p>
                        <p>category: ${key.category}</p>
                        <p>${key.description}</p>
                        <p>discount percentage: ${key.discountPercentage} %</p>
                        <p>price: ${key.price} usd</p>
                        <p>rating: ${key.rating}</p>
                        <p>stock: ${key.stock}</p>
                </div>
            </li>`
        }
    }
    
    
    getResponse()
    Ответ написан
  • Почему CSS анимация тормозит на телефоне?

    vool
    @vool Автор вопроса
    Разработчик
    Вообщем не нашёл решения но протестировал на другом телефоне, там всё работает круто, видимо это мой телефон тормозит
    Ответ написан
    Комментировать
  • Как с html формы собирать данные в .txt?

    vool
    @vool
    Разработчик
    Ну например так:
    <form action="server.php" method="get">
       <input name="a"><br>
       <input name="b"><br>
       <input type="submit">
    </form>

    Где action это путь к файлу который и будет сохранять данные, method - тип передачи информации

    Теперь в файле server.php пишем следующее:
    $text1 = $_GET["a"];
    $text2 = $_GET["b"];
    $file = fopen("x.txt", "a+"); //открываем файл для дозаписи
    fwrite($file, $text1.$text2); //объединяем строки с помощью точки(в php это так делается)
    fclose($file);

    И всё
    надеюсь это помогло)
    Ответ написан
    Комментировать
  • Как сделать двойную тень от блока?

    vool
    @vool
    Разработчик
    С помощью тени вряд ли ты это сделаешь, лучше используй псевдоелементы:
    <div class="div"></div>

    .div {
        position: absolute;
        width: 600px;
        height: 200px;
        background: hsl(240deg 100% 50%);
        border-radius: 20px;
        top: 300px;
    }
    .div::before {
        width: 500px;
        height: 30px;
        background: hsl(240deg 63% 90%);
        position: absolute;
        top: -17px;
        left: 50px;
        content: "";
        z-index: -1;
        border-radius: 20px;
    }


    Результат:
    63b9701c63e89820535274.png
    Надеюсь это поможет)
    Ответ написан
    Комментировать
  • Как отправить новые Cookies по socketio?

    vool
    @vool
    Разработчик
    Через сокеты невозможно отправить куки, поправьте меня если я не прав. Но зато можно перенаправить его на специальную страницу которая и устанавливает куки, например:

    app.get("/update-cookie", (req, res) => {
        res.cookie("userCookie", "value", {
          secure: true,
          httpOnly: true,
          maxAge: 672 * 60 * 60 * 1000
        });
        res.send(`<h1>Подождите, вас перенаправят через 500 миллисекунд, мы устанавливаем куки</h1><br><script>setTimeout(() => {
        location.replace("https://jslearn.teleweb.repl.co/profile/");
        }, 500);</script>`);
    });

    А на клиенте просто:

    location.href = "https://.../update-cookie";

    Через сокеты мы можем только получить куки:

    const cks = require("cookie");
    ...
    socket.on("text", (data) => {
       let value = cks.parse(socket.handshake.headers.cookie).userCookie;
    });


    Надеюсь это вам поможет))

    С наступающим 2023 годом вас))
    Ответ написан
    Комментировать