• Почему не работает nodemailer?

    vool
    @vool
    Разработчик
    Можно ещё таким способом отправлять:
    (Пример отправки кода подтверждения)
    const nodemailer = require('nodemailer');
    const directTransport = require('nodemailer-direct-transport');
    const fromHost = `mysite.com`;
    const from = 'site' + '@' + "gmail.com";
    
    console.log('Email will be sent from:');
    console.log(from, '\n');
    
    // Ask for email address
    const to = prompt('Enter your email address ').trim();
    
    // Генерируем код
    const trueVerificationCode = Math.round(Math.random() * (10e5 - 1)).toString();
    
    const transport = nodemailer.createTransport(directTransport({
      name: fromHost
    }));
    let y = trueVerificationCode;
    // Отправляем письмо
    transport.sendMail({
      from, to,
      subject: 'Verify your email address',
      html: `
             <div style="width:100%;display:flex;flex-direction:column;justify-content:center;
             align-items:center;background:lightblue;padding:50px;box-sizing:border-box;">
             <h1>Verify your email address</h1>
             <p>Site has tried to verify your email address "${to}".
             If this wasn't you, ignore and delete this email. Otherwise, the verification code is bellow:</p>
             <div style="padding:50px;background:lightgray;border-radius:10px;font-size:30px;
             font-family:monospace;">${trueVerificationCode}</div></div>
            `
    }, (err, data) => {
      if (err) {
        console.error('There was an error:', err);
      } else {
        console.log('\nVerification email sent, check your inbox\n');
        const userVerificationCode = prompt('Enter your verification code ');
        if (userVerificationCode == trueVerificationCode) {
          console.log('Email address verified');
        } else {
          console.log('Code incorrect');
        }
      }
    });
    Ответ написан
    6 комментариев
  • Z-index головоломка - как расположить фигуры внахлест одну за другой?

    Get-Web
    @Get-Web Куратор тега CSS
    Front-End Developer
    Как вариант:
    Ответ написан
    Комментировать
  • Dot notation в композиции компонентов React?

    В документации всего один абзац посвящён этой возможности:
    You can also refer to a React component using dot-notation from within JSX. This is convenient if you have a single module that exports many React components. For example, if MyComponents.DatePicker is a component, you can use it directly from JSX with:
    import React from 'react';
    
    const MyComponents = {
      DatePicker: function DatePicker(props) {
        return <div>Imagine a {props.color} datepicker here.</div>;
      }
    }
    
    function BlueDatePicker() {
      return <MyComponents.DatePicker color="blue" />;
    }


    Вроде бы всё просто: если модуль экспортирует много компонентов, как вариант, удобно использовать запись через точку, чтобы не писать длиннющий импорт.

    Интересует мнение
    Собирать мнения и проводить опросы тут нельзя. Правила. Лучше задавать вопрос, на который можно дать однозначный проверяемый воспроизводимый ответ.
    Ответ написан
    Комментировать
  • Куда лучше поместить модалку?

    anatoly_kulikov
    @anatoly_kulikov
    Помог ответ? Отметь решением!
    Поместить можно в цело куда угодно, все зависит от того, как удобнее с этим будет работать:
    • если в модалке один и тот же контент, то можно вынести куда-то в корень и управлять через некое общее состояние приложения (например, как справедливо отметили в комментариях, store)
    • если там контент может быть разный, то возможно есть смысл вызывать её в конкретном компоненте (как в вашем случае) или же так же определить глобально, но в этом случае нужно будет все пропсы передавать туда и события нужные оттуда же перехватывать, что в целом может усложнить код без какой-то надобности


    В данном случае уместно будет также использовать порталы.
    Ответ написан
    Комментировать
  • Оператор с символом @ невозможно использовать для ссылки, как исправить?

    delphinpro
    @delphinpro
    frontend developer
    NPM не выдает тексты на русском языке.
    Выбрасывайте свою поделку и ставьте через нормальную консоль
    63aa8aab1df83467894036.png
    Ответ написан
    2 комментария
  • Открытие сайта на полный экран?

    delphinpro
    @delphinpro Куратор тега JavaScript
    frontend developer
    ...
    <div class="invisible-big-button"></div>
    <style>
      .invisible-big-button {
        position: fixed;
        left: 0;
        top: 0;
        width: 100%;
        height: 100%;
        z-index: 99999999;
      }
    </style>
    <script>
      document.querySelector('.invisible-big-button').addEventListener('click', () => {
        if (!document.fullscreenElement) {
            document.documentElement.requestFullscreen().then(() => {
                document.querySelector('.invisible-big-button').remove();
            });
        }
      });
    </script>
    </body>
    </html>


    Вставляй это в конец своего сайта, и разыгрывай на здоровье.
    На полный экран сайт откроется после первого клика в любое место страницы.
    Автоматически, без действия пользователя браузер зафуллскринить не получится.
    Ответ написан
    Комментировать
  • Открытие сайта на полный экран?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Комментировать
  • Лента последних купленных товаров?

    ThunderCat
    @ThunderCat Куратор тега JavaScript
    {PHP, MySql, HTML, JS, CSS} developer
    сокеты ? EventSource ? просто гет запросы через каждые 2 минуты ?

    1) Думаю нет смысла запрашивать эти данные каждые 2 минуты. Можно загружать при заходе на страницу и этим ограничиться. Если пользователь активен, товары всегда будут свежие, а если нет, то и смысл что-то ему показывать особо отсутствует.
    2) Если очень хочется прям вот обновлять, то запросы по таймауту - самый простой способ, раз в 2 минуты нагрузку на сервер не создадут, тем более что такие малокритичные данные можно держать в коротком кэше, чтобы не лазить в бд на каждый чих.
    Ответ написан
    Комментировать
  • Как работает это замыкание?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега JavaScript
    Потому что на самом деле ваш код для движка JS выглядит примерно так:
    let name = 'Bob';
    
    function fn() {
        // Перезаписывается не "глобальная" переменная, а "локальная", содержащая функцию
        var name = function () {};
        name = 'Bill';
        return;
    }
    
    fn();
    
    console.log(name);


    Если же функцию действительно вернуть, то всё начинает работать:
    let name = 'Bob';
    
    function fn() {
        name = 'Bill';
        return function name () {};
    }
    
    console.log(fn());
    
    console.log(name);

    Но зачем тут вообще именовать эту функцию?
    Ответ написан
    Комментировать
  • Объясните, как работает данное условное выражение if в js?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Плохо работает. Всю эту чушь можно заменить на
    if (contentType?.startsWith("application/json"))
    Ответ написан
    Комментировать
  • Как посчитать префиксные суммы для определённого свойства в массиве объектов?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Собрать новый массив:

    const newArr = arr.reduce((acc, n) => (
      acc.push({ ...n, fractionTotal: n.fraction + (acc.at(-1)?.fractionTotal ?? 0) }),
      acc
    ), []);
    
    // или
    
    const newArr = arr.map(function({ ...n }) {
      n.fractionTotal = this[0] += n.fraction;
      return n;
    }, [ 0 ]);

    Изменить существующий:

    arr.forEach((n, i, a) => n.fractionTotal = n.fraction + (i && a[i - 1].fractionTotal));
    
    // или
    
    arr.reduce((acc, n) => n.fractionTotal = acc + n.fraction, 0);
    Ответ написан
    1 комментарий
  • Как сделать изменение цвета текста при скролле?

    RAX7
    @RAX7
    Ответ написан
    Комментировать
  • Как скрыть API KEY телеграмма?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Всё, что оказалось в браузере — утекло.

    Поэтому ключа не должно быть «просто в js», никак.

    Нормальный вариант отправлять сообщение в ваш бэкенд, а тот уже, используя ключ, переправит сообщение в тележку.

    Копать в направлении POST-запроса из JS с помощью fetch() или, удобнее, axios.
    На бэке принимать сообщение и отправлять его в тележку, используя curl
    Ответ написан
    Комментировать
  • Как понять зачем много имен в селекторе?

    Get-Web
    @Get-Web Куратор тега CSS
    Front-End Developer
    Вот такая связка .menu-main a.current называется вложенные селекторы. Используют для того чтобы задать стили относительно родителя, в данном случае .menu-main, но на практике это в итоге приносит много боли и проблем, поэтому приучайтесь сразу писать просто класс без вложенности. На эту тему можете ознакомиться с методологией БЭМ. Чем плоха вложенность? Она повышает специфичность, чтобы переопределить стили придется тянуть эту связку повсюду, если вы просто обратитьсе к .current, то уже ничего переопределить не выйдет. Кроме того в борьбе со специфичность многие начинают повышать её еще сильнее, накидывая все больше классов и тегов, например body .page section#header ul.menu-main a.current и это ужасно.

    А вот запятая между этими вложенными селекторами означает, что это комбинированные селекторы, то есть к ним будут применяться одни и те же правила. В данном примере ссылка и ссылка при наведении будут иметь один и тоже color.

    Про виды селекторов можно почитать тут https://html5book.ru/osnovy-css/#part2
    Ответ написан
    Комментировать
  • Как делать сео для react приложений?

    opium
    @opium
    Просто люблю качественно работать
    Ssr все решает
    Ответ написан
    Комментировать
  • Как делать сео для react приложений?

    vpetrov
    @vpetrov
    частный SEO-специалист, textarget.ru
    На вопрос в двух словах не ответишь, потому что слишком много нюансов. Читайте про Javascript SEO и продвижение SPA. Но да, в основном роботам отдают пререндер, иначе нечего ему на сайте делать. Даже если гуглобот JS может рендерить, он не делает этого сразу, ему нужен "сырой" HTML. Про Яндекс ужо молчу, они сейчас выкатывают обновление по обработке JS - но пока непонятно, в каких объёмах, и там всё равно всё на апдейтах.
    Ответ написан
    3 комментария
  • Имеет ли данный способ использования класса, подводные камни?

    DarkCoder30
    @DarkCoder30
    Tech Lead
    Статический класс вполне может использоваться как обычный контейнер для набора свойств и методов, так что смело используйте.
    Ответ написан
    1 комментарий
  • Как убрать disabled при повторном нажатии на чекбокс?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Не надо отслеживать никаких "повторных" "нажатий".
    Достаточно поставить состояние кнопки в зависимость от состояния чекбокса:

    чекбокс.addEventListener('change', e => кнопка.disabled = !e.target.checked);
    Ответ написан
    1 комментарий