• Как при рекурсивном вызове функции избежать, многократного вызова вложенной функций?

    Twstd
    @Twstd Автор вопроса
    Разрабатываю приложения и микросервисы на Nodejs
    В итоге решил вопрос, так
    const readline = require('readline-sync');
    const { error } = require("console");
    
    recursion();
    
    function recursion() {
        let input = readline.question("Enter number > 10\n");
        try {
            one(input);
            two(input);
        } catch {
            recursion();
        }
    }
    
    function one(input) {
        try {
            if (input < 10) throw error;
            console.log('выполняется функция one');
        } catch(err) {
            console.error('Ошибка в функции one');
            throw err;
        }
    }
    
    function two(input) {
        console.log('выполняется функция two', input);
    }
    Ответ написан
    Комментировать
  • Создает пустой блок. И при нажатии на element__image изображение и текст передавались в #popup_photo. Как надо сделать?

    Twstd
    @Twstd
    Разрабатываю приложения и микросервисы на Nodejs
    Чтобы не создавался пустой блок
    function addCard(titleValue, linkValue) {
        if(titleValue && linkValue) {
              const inpTemplate = document.querySelector("#element").content;
              const inpElement = inpTemplate.querySelector(".element").cloneNode(true);
              Container.prepend(inpElement);
              inpElement.querySelector(".element__title").textContent = titleValue;
              inpElement.querySelector(".element__image").src = linkValue;
        }
    }


    И при нажатии на element__image изображение и текст element передавались в #popup_photo

    для этого есть event.target - стандартный параметр для функции, которая вызывается колбэком у addEventListener

    Что то в этом роде, учитывая что все слушатели уже есть
    const popImg= document.querySelector("#popup_image"); 
    const Img= document.querySelector(".popup__image"); 
    const Disc = document.querySelector(".popup__discription");
    
    function openPopupImage(e) {
      Img.src = e.target.src;
      // для простоты примера, берем данные из атрибута alt, предполагается что он заполнен
      Img.alt = e.target.alt: 
      Disc .textContent = e.target.alt;
      openPopup(popImg); // передаём весь попап, для смены класса в будущем
    };
    
    function openPopup(popup) {
      popup.classList.add("popup_opened");
    }
    Ответ написан
  • Как передать полученные из Json данные в переменную для вывода на сайт?

    Twstd
    @Twstd
    Разрабатываю приложения и микросервисы на Nodejs
    Это вариант для случая если функция getData необходима, там как можно просто воспользоваться fetch и передать в результат его выполнения функцию showData, не оборачивая fetch лишний раз в асинхронную функцию...
    В функции showData не все ключи присутствуют в ответе, там уже сами решите что убрать, а что оставить
    // get data
    async function getData() {
      let result = await fetch("https://jsonplaceholder.typicode.com/posts")
        .then((response) => response.json());
    // .then(json => console.log(json)) - эту строчку убираем, она приводила к тому, что fetch  не возвращал результат
      return result;
    }
    
    // show data
    getData().then((result) => showData(result));
    function showData(allGoods) {
      let outGoods = "";
      for (let key in allGoods) {
        outGoods += `
            <div class="goods__item">
                <a><img src="${allGoods[key].image}"/></a>
                <div class="goods__tx">
                    <h2>${allGoods[key].name}</h2>
                    <p>${allGoods[key].desc}</p>
                    <span>${allGoods[key].availability}</span>
                    <div class="goods__bottom">
                        <b>${allGoods[key].price} $</b>
                        <div class="goods__btn">
                            <button class="goods__minus" data-id="${key}">-</button>
                            <button class="goods__plus" data-id="${key}">+</button>
                        </div>
                    </div>
                </div>
            </div>`;
      }
      let goodsContent = document.querySelector(".goods .container");
      goodsContent.innerHTML = outGoods;
    }
    Ответ написан
    1 комментарий
  • Cookie - как сделать чтобы cookie применялись ко всему сайту, а не к каждой странице отдельно?

    Twstd
    @Twstd
    Разрабатываю приложения и микросервисы на Nodejs
    Передать такое значение пути
    $.cookie('name', 'value', {path: '/' });
    Ответ написан
    Комментировать
  • Как сохранить отрисованный html при перезагрузке с помощью localStorage?

    Twstd
    @Twstd
    Разрабатываю приложения и микросервисы на Nodejs
    можно сделать так, берём данные из LocalStorage и отрисовываем html, сильно смысла нету в данном случае хранить одинаковый html

    if (currentCars.length > 0) {
      for (let car of currentCars) {
        renderFormCar(car);
      }
    }
    
    function renderFormCar (currentCar) {
      let type = currentCar?.CarType || "";
      let model = currentCar?.Model || "";
      let passCarClone = document.createElement("div");
      passCarClone.classList.add("car-item");
      passCarClone.innerHTML = `
           <span class="remove">X<span>
           <input type="text" class="form__car-type" placeholder="Введите тип" value="${type}">
           <input type="text" class="form__car-model" placeholder="Введите Марка и Модель тр. ср-ва" value="${model}">
           <div></div>
            <button class="primary-btn" type="submit">Применить</button>`;
      passCar.append(passCarClone);
    };
    
    addCar.addEventListener("click", function () {
      renderFormCar();
      passCar.addEventListener("click", function (e) {
        if (e.target.classList.contains("remove")) {
          e.target.parentNode.remove();
        }
      });
    });
    Ответ написан
    Комментировать
  • Как оставить открытым элемент срываемый с помощью чекбокса?

    Twstd
    @Twstd
    Разрабатываю приложения и микросервисы на Nodejs
    прежде чем делать это...
    if (localStorage.getItem('filtervis') == "true") {
      document.getElementById("filtervis").setAttribute('checked','checked');
    }

    дождитесь загрузки DOM, вот так
    document.addEventListener("DOMContentLoaded", checkChecked);
    function checkChecked() {
      if (localStorage.getItem("filtervis") == "true") {
        document.getElementById("filtervis").setAttribute("checked", "checked");
       document.getElementById("article-id").setAttribute("style", "display"); // убираем display: none
      }
    }
    Ответ написан
    1 комментарий
  • Как определить формат даты в поле [type=date]?

    Twstd
    @Twstd
    Разрабатываю приложения и микросервисы на Nodejs
    1) date.toLocaleString(locales) - через параметр передать нужный формат, если не передавать то будет по региональным настройкам браузера
    MDN
    2) с помощью методов объекта дата(getFullYear(), getMonth(), getDate()) составить нужную строку
    Ответ написан
  • Как скачать полностью сайт?

    Twstd
    @Twstd
    Разрабатываю приложения и микросервисы на Nodejs
    судя по всему сайт на написан на React...
    было похожее обсуждение тут...
    тут...
    Ответ написан
    Комментировать
  • Почему выдаёт ошибку Uncaught ReferenceError: clicked is not defined at HTMLButtonElement.onclick?

    Twstd
    @Twstd
    Разрабатываю приложения и микросервисы на Nodejs
    В том виде как есть, должно работать.
    Судя по ошибке, браузер функцию clicked() не видит...
    Тут либо скрипт цепляете перед html... либо кэш браузера нужно отключить
    Ответ написан
  • Как объединить две функции в одну?

    Twstd
    @Twstd
    Разрабатываю приложения и микросервисы на Nodejs
    То что ищем передавать в параметрах функции.
    Написал самый простой вариант, если параметров много, то можно дописать функцию и сразу передавать массив параметров

    $('#search_card').keyup(function(){
        let search = this;
    showAndHide ('[data-item-name="name"]');
    showAndHide ('input[name^=name]');
    function showAndHide (param) {
        $('#tabname tbody tr').find(param).each(function() {
          if($(this).text().toLowerCase().indexOf($(search).val().toLowerCase()) === -1) {
            $(this).closest('tr').hide();
          }
          else {
            $(this).closest('tr').show();   
          }  
        });
      });
    }
    Ответ написан
  • Как реализовать структуру БД и сам бэкенд для сервиса бронирования отелей с динамическими ценами?

    Twstd
    @Twstd
    Разрабатываю приложения и микросервисы на Nodejs
    В Модели цену сделать геттером, который будет считать её динамически исходя из контекста

    Например в случае использования MongoDB и Mongoose

    const otelSchema = new Schema({
      price: Number // обычная цена
    }, {
      virtuals: {
        priceToday: {
          get() {
           // делаем что то с ценой this.price в зависимости от даты...
            return // возвращаем новую цену
          }
        }
      }
    });
    Ответ написан
    Комментировать
  • Почему при импорте функций вылезает ошибка 'is not a function'?

    Twstd
    @Twstd
    Разрабатываю приложения и микросервисы на Nodejs
    но работать всё равно не будет...
    если Вы объявляете функции внутри другой функции, и хотите получить к ним доступ из вне... то предположительно это должна быть либо функция конструктор или класс
    тогда app.js будет вот таким:
    let Func = require("./functions.js");
    let func_create = new Func();
    console.log(func_create.time());


    А если отвечать на вопрос почему выходит именно такая ошибка, то интерпретатор ищет у импортированной функции свойство time, оно не задано, то есть undefined, то есть не является функцией
    Ответ написан
    5 комментариев
  • Как получить запрос mongodb + expressjs по локальному порту?

    Twstd
    @Twstd
    Разрабатываю приложения и микросервисы на Nodejs
    Тут явно ошибка подключения к БД, я так понимаю что строчка 20 уже не выполняется...
    Распространенная ошибка пользователей Windows, а у Вас я так понимаю Windows, это отсутствие папки для БД в каталоге по умолчанию C:\data\db, её нужно создать вручную.
    Ответ написан
    Комментировать
  • Как залить node js приложение на сервер?

    Twstd
    @Twstd
    Разрабатываю приложения и микросервисы на Nodejs
    Можно разделить процесс на две части:
    1. настройка операционной системы
    2. установка и настройка окружения для работы приложения


    Настройка операционной системы
    Судя по ссылке, это Ubuntu...
    • создать пользователя и дать ему необходимые права. Отключить root
    • обновить все пакеты до последних версий sudo apt update && sudo apt upgrade


    установка и настройка окружения для работы приложения

    • Установить и запустить сервер БД
    • Определить место в каталоге где будет находиться приложение и скопировать его туда с помощью git clone
    • Установить все зависимости из приложения, находясь в папке приложения... npm i
    • Определиться с процесс менеджером, обычно это pm2, но есть и другие. Он будет следить, чтобы приложение было всегда онлайн т.д.


    обычно этого достаточно для начала...

    url приложения будет IP адрес самого сервера + номер порта, который будет указан в самом приложении Nodejs.
    http://IP сервера: номер порта
    Номера порта: 80 - для http
    Номер порта: 443 - для https
    по умолчанию Nodejs использует порт 3000, если он запущен локально...

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

    Так же не лишним будет установить и настроить обратный прокси nginx, но на этапе разработки можно и без него...
    Ответ написан
    Комментировать
  • Как отдавать статику через express js?

    Twstd
    @Twstd
    Разрабатываю приложения и микросервисы на Nodejs
    Но при этом всё тот же Express рекомендует использовать для отдачи статики обратный прокси, например nginx. Если речь идёт о среде production конечно...
    Ответ написан
    1 комментарий
  • Как запретить менять значения свойств инфоблока в 1С Битрикс БУС?

    Twstd
    @Twstd Автор вопроса
    Разрабатываю приложения и микросервисы на Nodejs
    Если кому то будет интересно решение, то встроенного решения нету. Проблему решил через другое событие
    AddEventHandler('catalog', 'OnSuccessCatalogImport1C', 'customCatalogImportStep');
    Ответ написан
    Комментировать