• Почему next/link не правильно формирует URL адреса?

    ms-dred
    @ms-dred Автор вопроса
    Вечно что то не то и что то не так...
    Нашел проблему
    Связана с файлом next-i18next.config.js
    В нем неправильно прописаны domains
    Ответ написан
    Комментировать
  • Как выдернуть объект из массива с самым длинным полем?

    ms-dred
    @ms-dred Автор вопроса
    Вечно что то не то и что то не так...
    array.reduce((prev, cur) => cur.field.length > prev.field.length ? cur : prev)
    Ответ написан
    Комментировать
  • Как в Next.js изменить url страницы без обновления данных?

    ms-dred
    @ms-dred Автор вопроса
    Вечно что то не то и что то не так...
    Как выяснил next/router использует Context API и обновляет свое внутреннее состояние, поэтому не получится осуществить данную задумку, но ее можно сделать с помощью window.history
    Может кому то пригодится
    window.history.replaceState(
                {
                    ...window.history.state,
                    as: href,
                    url: href
                },
                "",
                href
            )


    В целом мне нужно было с эмитировать визуально переход на новую страницу и возврат к предыдущей во время открытия и закрытия модельного окна, с изменением URL, TITLE. Получилось все отлично =)
    Ответ написан
    Комментировать
  • Как распределить элементы по высоте в трех колонках?

    ms-dred
    @ms-dred Автор вопроса
    Вечно что то не то и что то не так...
    Попробовал узнать индекс с минимальным значением, для этого создал дополнительный массив и суммировал высоту элементов по индексу, но ничего не вышло
    Вот пример
    // Дополнительный массив
            var columnsHeight = Array.from({
                length: columnsCount
            }, function () {
                return [];
            });
    
            React.Children.forEach(children, function (child, index) {
    
                if (child && React.isValidElement(child)) {
                    const { sizeHeight } = child.props.document;
                    columnsHeight[index % columnsCount] = +columnsHeight[index % columnsCount] + sizeHeight
    
                    var minIndex = columnsHeight.indexOf(Math.min.apply(null, columnsHeight));
                    if (columns[minIndex]) {
                        columns[minIndex].push(child)
                    }
                    //columns[index % columnsCount].push(child);
                }
            });


    Распределяет не правильно, может где то ошибку допустил?
    Ответ написан
    Комментировать
  • Падает MongoDB из за нехватки памяти, как побороть?

    ms-dred
    @ms-dred Автор вопроса
    Вечно что то не то и что то не так...
    Собственно решилась проблема именно откатом на предыдущие версии npm пакеты MongoDB и Mongoose. Не стал разбираться кто из них криво работал, думаю именно Mongoose...
    Ответ написан
    Комментировать
  • Как произвести слияние коллекций и получением только первой записи в массиве?

    ms-dred
    @ms-dred Автор вопроса
    Вечно что то не то и что то не так...
    Сам допехал
    photos: {
     $arrayElemAt: [{
      "$map": { 
       input: "$photos",
       as: "p",
       in: { $concat: ['$$p.domain', 'folder/', '$$p.image'] } }
      }, 0 ]
    }
    Ответ написан
    Комментировать
  • Почему цена не пересчитывается?

    ms-dred
    @ms-dred
    Вечно что то не то и что то не так...
    Ответ написан
    Комментировать
  • Как более грамотно переписать подобный код?

    ms-dred
    @ms-dred
    Вечно что то не то и что то не так...
    Мне кажется эта конструкция лишняя на данном этапе по крайней мере
    if (player_chance > enemy_chance) {
    else if (enemy_chance > player_chance)

    Там разные переменные фигурируют, почему бы их последовательно не определить.
    И лишнее когда переменную переопределяете постоянно
    player_hp -= **
    Можно сделать что то вроде того (Примерно!)
    enemy_hp -= (p <= 10 && p > 7) && 40 || (p <= 7 && p > 5) && 20 || (p <= 5 && p > 0) && 10
    player_hp -= (e <= 10 && e > 7) && 40 || (e <= 7 && e > 5) && 20 || (e <= 5 && e > 0) && 10

    Ну и тут придется создать функции с цепочками действий, будет и понятно, и гибко

    Пока писал заметил что так будет даже лучше
    enemy_hp = hp(player_chance)
    player_hp = hp(enemy_chance)
    
    function hp(e) {
        return (e <= 10 && e > 7) && 40 || (e <= 7 && e > 5) && 20 || (e <= 5 && e > 0) && 10
    }

    Но и это еще улучшить можно
    Ответ написан
    Комментировать
  • На сколько важен PageSpeed от google в 2019?

    ms-dred
    @ms-dred
    Вечно что то не то и что то не так...
    Не важен, лишь бы не красный был, остальное не столь важно, да и видел даже в топе сайты которые в красной зоне висят и ничего.
    Ответ написан
    Комментировать
  • Как сократить запросы update при учете просмотров документа?

    ms-dred
    @ms-dred Автор вопроса
    Вечно что то не то и что то не так...
    В общем пока альтернативы нет, хочу попробовать следующий метод для разгрузки монги
    Вместо обновления коллекции решил писать идентификаторы в файл views.log
    function updateStats(request) {
        return fs.appendFileSync("views.log", `${request.document}|`, 'UTF-8') // request.document = часть URL по которой идет выборка
    }


    Ну и собственно дальше по крону буду дергать файл, перебирать данные, перезаписывать все скопом в ночное время
    Из файла куски кода
    //file.split('|').filter(function (e) { return e })
    
    function setCountObject(request) {
        return documents = [], Promise.all(request.map(async (document) => {
            return (item = documents.find(e => e.url === document)), item && (item.count = item.count + 1) || documents.push({
                url: document,
                count: 1
            })
        })), documents
    }
    
    function updateDocuments(request) {
        return Promise.all(request.map(async (document) => {
            return Collection.updateOne({ url: document.url }, { $set: { "stats.view": document.count }})
        }))
    }


    Монгу в пике трафика конечно разгрузить это, надо смотреть и тестить =)
    Ответ написан
    Комментировать
  • Как побороть, MongoDB 4.0 жрет всю память и падает, что можно придумать?

    ms-dred
    @ms-dred Автор вопроса
    Вечно что то не то и что то не так...
    И так, видимо дело было действительно в mongodb, всего скорее в ней была утечка.
    Сегодня обновился до 4.0.1, врубил top и наблюдал.
    Не увидел момента освобождения памяти, но mongod использовал около 45% памяти, когда я вновь в консольку глянул через час где то, то было уже 33% памяти, видать был сброс. Открыл лог mongodb, перезагрузок не было.
    Еще понаблюдаю конечно, но похоже либо криво встала, либо ошибка изначально в mongodb была
    mongostat тоже показывает что mongo меньше потребляет память, не на много, но меньше.
    Ответ написан
  • Почему result undefined?

    ms-dred
    @ms-dred
    Вечно что то не то и что то не так...
    var a = "";
    Ответ написан
    Комментировать
  • Как прижать блоки к верху и низу при удаление контента в теле документа?

    ms-dred
    @ms-dred
    Вечно что то не то и что то не так...
    Один из вариантов, глянуть тут реализацию csstemplater.com
    Ответ написан
    Комментировать
  • Как сократить время выполнения сложного текстового запроса?

    ms-dred
    @ms-dred Автор вопроса
    Вечно что то не то и что то не так...
    При разбитии запроса на два, получилось сократить время, но не на столько на сколько хотелось бы.
    Был взять запрос выполняющийся за 4.9ms и удалось сократить его до 1.1ms
    return Wallpapers
            .aggregate([
                { $match: { public: { $gte: 2 }, $text: { $search: 'сам запрос' } } },
                { $project: { _id: 1, score: { $meta: "textScore" } } },
                { $sort: request.sort },
                { $skip: request.skip },
                { $limit: request.limit },
                { $group: { _id: null, uid: { $push: '$_id' }}}
            ]).then(e => {
                return e.length ? Wallpapers.aggregate([
                    { $match: { _id: { $in: e[0].uid }} },
                    {
                        $lookup: {
                            from: 'users',
                            localField: 'owner',
                            foreignField: '_id',
                            as: 'owner'
                        }
                    },
                    { $project: {
                        _id: 1,
                        image: { $concat: ['$domain', 'o/', '$image', '?route=thumb&h=350'] },
                        large: { $concat: ['$domain', 'o/', '$image', '?route=mid&h=750'] },
                        href: { $concat: [request.CONST.href, 'wallpaper/', '$url', '.html'] },
                        hrefClass: config.hrefAddClass,
                        tags: { $slice: ['$tags', 12] },
                        size: {
                            width: { $trunc: { $multiply: [ { $divide: ['$size.width', '$size.height'] }, 350] } },
                            height: { $trunc: 350 }
                        },
                        style: {
                            $concat: [
                                'background-color: rgb(',
                                { $toLower: { $arrayElemAt: [ '$pixels.rgb.r', 0 ] } }, ',',
                                { $toLower: { $arrayElemAt: [ '$pixels.rgb.g', 0 ] } }, ',',
                                { $toLower: { $arrayElemAt: [ '$pixels.rgb.b', 0 ] } }, ')'
                            ]
                        },
                        owner: { $arrayElemAt: [ '$owner', 0 ] },
                        likes: 1,
                        indexAt: 1,
                        title: 1,
                    }}, {
                        $group: {
                            _id: "$_id",
                            image: { $first: '$image' },
                            large: { $first: '$large' },
                            href: { $first: '$href' },
                            hrefClass: { $first: '$hrefClass' },
                            tags: { $first: '$tags' },
                            size: { $first: '$size' },
                            style: { $first: '$style' },
                            owner: { $first: {
                                _id: '$owner._id',
                                name: '$owner.name',
                                avatar: { $concat: ['background-image:url(', '$owner.avatar', ')'] },
                                href: { $concat: [request.CONST.href, '$owner.username', '/'] }
                            } },
                            likes: { $first: '$likes' },
                            indexAt: { $first: '$indexAt' },
                            title: { $first: '$title' }
                        }
                    }
                ]).then() : []
            })


    Если будут у кого другие варианты, напишите пожалуйста =)
    Ответ написан
    Комментировать
  • Объясните простым языком, что делает эта строчка?

    ms-dred
    @ms-dred
    Вечно что то не то и что то не так...
    Это условие, если переменная successful что то содержит, значит msg равно successful, иначе unsuccessful
    В обще это тоже самое что и
    var msg = 'unsuccessful'
    if(successful) msg = 'successful'

    Еще можно писать так
    var msg = successful && 'successful' || 'unsuccessful';
    Ответ написан
    2 комментария
  • Не получается сделать request?

    ms-dred
    @ms-dred
    Вечно что то не то и что то не так...
    Не так
    request({
    А так
    request.get({
    или 
    request.post({
    Ответ написан
    Комментировать
  • Как скачать видео по ссылке используя Node.js?

    ms-dred
    @ms-dred
    Вечно что то не то и что то не так...
    async/await + request-promise + цикл через Promise.all(...) = профит 100%
    Сам гружу, только не видое, а тяжеловесные фото, раньше тоже мучался с недокаченными фото (когда с PHP на ноду пересел)
    Ответ написан
    2 комментария
  • Не проходит пост запрос на поддомен (Access-Control-Allow-Origin), как решить проблему?

    ms-dred
    @ms-dred Автор вопроса
    Вечно что то не то и что то не так...
    Проблема была с Nginx
    Ответ написан
    Комментировать
  • Может ли пользователь отправить ajax-запрос?

    ms-dred
    @ms-dred
    Вечно что то не то и что то не так...
    Может конечно, даже если у вас на сервере скрипта не будет, сам напишет свой и отправит.
    Защищаться от таких действий надо на стороне сервера проверки делать, копайте в сторону csrf token, он отсекет запросы с чужих доменов и прочее, но и этого недостаточно будет в вашем случае, нужно еще проверки делать, частота обращений с одной сессии, может какой то ключ кодировать и сверять на сервере. Вариантов на самом деле масса, все сугубо индивидуально и возможно какую то жесткую проверку делать не целесообразно.
    Я лично стараюсь избегать подобного, смысла нет костыли делать, когда проще ногу вылечить
    Ответ написан
    Комментировать
  • Почему letsencrypt создает новые сертификаты в новом каталоге?

    ms-dred
    @ms-dred Автор вопроса
    Вечно что то не то и что то не так...
    В общем при моей проблеме похоже решение указать в запросе название сертификата
    --cert-name domain.ru
    Тогда пишет что будет добавлен новый домен, а старые неуказанные будут удалены.
    Так что это должно работать!
    Сейчас только лимит исчерпан, и надо подождать, пишет
    An unexpected error occurred:
    There were too many requests of a given type :: Error creating new cert :: too many certificates already issued for exact set of domains: ....домены... see https://letsencrypt.org/docs/rate-limits/
    Ответ написан
    Комментировать