Задать вопрос
  • Почему не происходит отправка данных?

    @nickerlan
    Очень рекомендую освоить:
    1) Инструменты шеринга кода. Где-то где можно было бы посмотреть ваш код, вместо того чтобы предполагать пальцем в небо (ну например url: "../auth.php", - у вас точно скрипт лежит в папке более высокого уровня относительно текущего адреса?). Даже если бы просто на git выложили репо, уже проще было бы подсказать что-то.
    2) Элементарные инструменты отладки:
    - Панель Network в браузере, чтобы смотреть улетает ли сам запрос, что в нем улетает и каков ответ
    - Хотя-бы простые echo в PHP, чтобы посмотреть что с переменными происходит.
    Ответ написан
    Комментировать
  • Как сохранять разные записи в localstorage?

    @nickerlan
    Просто записывайте в localStorage не текущую дату, а массив выбранных дат.
    dateClick=(date)=>{
      var dates = localStorage.getItem('datesSelected')
      if (Array.isArray(dates)) 
      {
        if (dates.find(d=>d==date)){
        //Такая дата уже есть, снимаем выбор всех дат
            localStorage.setItem('datesSelected',[])
            draw([]) // обновляем классы отображения
        }
        else{ // если такой даты еще не было добавляем ее в массив
            dates.push(date)
            localStorage.setItem('datesSelected',dates)
            draw(dates) // обновляем классы отображения
            }
        }
        else localStorage.setItem('datesSelected',[date]) //если еще ничего не было задано, задаем одну дату
    }
    Ответ написан
    Комментировать
  • Сгорают ли промисы после res.end?

    @nickerlan Автор вопроса
    Выяснил: после отправки запроса - лямбда завершается.
    По крайней мере в случае с Zeit Now, а это надстройка над AWS Lambdas.

    На мой вопрос - что с этим делать, они ответили "You are looking for queue support. You would put that job in queue to be consumed by another resource. We will release this in the future and I will contact you when its live."

    Похоже, придется использовать костыль - всю асинхронную часть оборачивать, потому что это в примере, функция всего одна. На деле - их много, и они по разным модулям сидят.

    const __async=(promise)=>{
        if (!process.promises || !Array.isArray(process.promises)) process.promises=[];
        process.promises.push(promise)
    }
    const __withasync= (handler)=>{
        return async (req,res)=>{
            var result = await handler(req,res);
            if (process.promises && Array.isArray(process.promises)) await Promise.all(process.promises);
            return result;
        }
    }
    
    module.exports={__async,__withasync}


    Если есть решение лучше - дайте знать
    Ответ написан
    Комментировать
  • Как сделать докрутку (scroll) при условии?

    @nickerlan
    var doAnimatedScroll(action,distance,speed){
    /* пишем функцию, которая делает плавный скролл на нужное количество пикселей в нужном направлении. 
    на время анимации ставим window.fixPositionAnimationInProgress=true;
    и лочим скролл страницы
    */
    }
    /* Функция, решающая как "поправить" слайды */
    var fixPositionAnimation=function(){
       var delta = window.scrollY % window.innerHeight;
       var action="MOVE UP";
       var distance = delta;
       if (delta<window.innerHeight/2) {
           action="MOVEDOWN"
       distance = window.innerHeight-delta;
    }
    doAnimatedScroll(action,distance,700)
    
    }
    
    /* Функция, попытки скролла. Вместе с функцией ниже срабатывает, только для последнего вызова в череде, того, у которого правильный id*/
    var tryScroll = function(uid){
       if (window.scrollUid==uid&&window.fixPositionAnimationInProgress) {
          fixPositionAnimation()
       }
    }
    var condensor = function(){
       if (!window.fixPositionAnimationInProgress) 
             setTimeout(function(){
                var uid=Date.now; 
                window.scrollUid=uid; 
                tryScroll(uid)}, 1000)
        }
    
    window.onscroll = condensor
    Ответ написан
    Комментировать
  • Как скрыть Api Key при ajax запросе?

    @nickerlan
    Если это стороннее API, с которого надо вытащить данные - сделать прослойку на бекэнде (на NodeJS или PHP), которая цепляет находясь на Вашем сервере и зная ключ, все что надо, а потом уже отдает клиенту.

    Если это свое API, то ключ стоит воспринимать как логин-пароль этого конкретного пользователя, а потому скрывать его от него же смысла никакого нет.

    PHP - простой вариант для прослойки.
    Но у вопроса тег JS, на JS тоже можно, и если не хотите возиться с серверами для этого, можете попробовать now.sh, есть бесплатная версия https://zeit.co/examples/nodejs/

    1. Установите now
    2. Создадите простой код вроде этого:
    const {send} = require('micro')
    const axios = require('axios')
    
    module.exports = async (req, res) => {
      var result = await axios.post(API_LINK,{token:SECRETTOKEN}).then(d=>d.data))
      send(res,200,result);
    };

    Рядом файл now.json
    {
        "version": 2,
        "name": "nodejs",
        "builds": [
            { "src": "*.js", "use": "@now/node" }
        ]
    }

    А потом в консоли из той же папки:
    npm init -y && npm install axios micro --save && now

    Ссылка на скрипт появится в буфере обмена
    Ответ написан
    3 комментария
  • Как научиться создавать сайты, если в программировании полный 0?

    @nickerlan
    Для начала нужно цель прояснить и срок. Если просто быстро сайтики собирать научиться - то рекомендую сначала с tilda.cc поиграться, потом с webflow.io. Их по крайней мере с нуля быстро можно освоить. И наверное это тоже можно назвать программированием.

    Если же цель - достичь хорошего уровня, то нужно уже профессиональные инструменты осваивать.
    Я бы взял как программу минимум HTML, CSS, JS, NodeJS, React, Mongo. Подача мне вот тут нравится https://codedojo.ru/
    Еще, на базовом уровне алгоритмы хорошо бы изучить. Понять какие бывают структуры данных. Поиграться с функциональным и объектно ориентированным программированием.

    Как бы я построил обучение.
    Я бы выбрал проект, который хочется довести до конца. Реальную задачу.
    И начал бы просто ее делать. Задавая вопросы гуглу, здесь или знакомым программистам. Садится, писать, пробовать и до победного.

    И параллельно решал бы задачи, начиная с простых. Тут список сайтов где можно тренироваться https://tproger.ru/digest/competitive-programming-...
    Ответ написан
    Комментировать
  • Как сделать быструю пагинацию с сортировкой по дате?

    @nickerlan
    Навскидку
    SELECT * FROM comment WHERE id > {LAST_COMMENT_INDEX} LIMIT 50

    Где LAST_COMMENT_INDEX это индекс последнего коммента с предыдущей страницы
    Ответ написан
  • Как присвоить один и тот же class элементам с одинаковым значением data?

    @nickerlan
    "Автоматом" не получится - нужен как минимум обработчик события, в какой момент осуществлять такую проверку.
    Не очень просто сценарий понятен - как там active появился. Если при клике, то имеет смысл туда повесить что-то в духе
    document.querySelectorAll('[data-item='+e.target.getAttribute('data-item')+']')
          .forEach(liActive=> 
            {liActive.className='active'})


    Если же проверку нужно в какой то другой момент осуществить для всех, то примерно так будет:

    document.querySelectorAll('[data-item]').forEach(liElem=>{
      if(liElem.className==='active')){
        document.querySelectorAll('[data-item='+liElem.getAttribute('data-item')+']')
          .forEach(liActive=> 
            {liActive.className='active'})
      }
    }
    Ответ написан
    1 комментарий
  • Как сделать так, что бы высота блоков была одинаковая?

    @nickerlan
    Для горзонтальных flexbox: просто {display:flex} на родительском контейнере
    Для вертикальных css grid. {display:grid; grid-template-rows:"1fr 1fr 1fr"} на родительском контейнере
    Ответ написан
    2 комментария
  • Умеет ли npm использовать один модуль для разных проектов?

    @nickerlan Автор вопроса
    Нашел ответ.
    npm - по умолчанию не оптимизирован в том смысле о котором возник вопрос.
    yarn - кэширует пакеты, но все равно их копирует каждый раз плодя копии
    pnpm - решает вопрос. И кэширует и благодаря хардлинкам не плодит клонов. (https://pnpm.js.org)
    Ответ написан
    Комментировать