Ответы пользователя по тегу Node.js
  • Как распределить элементы по высоте в трех колонках?

    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);
                }
            });


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

    ms-dred
    @ms-dred Автор вопроса
    Вечно что то не то и что то не так...
    Сам допехал
    photos: {
     $arrayElemAt: [{
      "$map": { 
       input: "$photos",
       as: "p",
       in: { $concat: ['$$p.domain', 'folder/', '$$p.image'] } }
      }, 0 ]
    }
    Ответ написан
    Комментировать
  • Как сократить запросы 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 меньше потребляет память, не на много, но меньше.
    Ответ написан
  • Как сократить время выполнения сложного текстового запроса?

    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() : []
            })


    Если будут у кого другие варианты, напишите пожалуйста =)
    Ответ написан
    Комментировать
  • Не получается сделать 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
    Ответ написан
    Комментировать
  • Утечка памяти при async/await?

    ms-dred
    @ms-dred Автор вопроса
    Вечно что то не то и что то не так...
    Нашел где была утечка, но не тут.
    Походе дело в npm sharp. Есть страницы где нужно предоставить картинку пользователю с нужным размером, по запросу скидывается все на sharp, для изменения размера изображения. Решил поставить GM для эксперимента и рост потребления памяти перестал увеличиваться.

    До этого стоял sharp на калбеках и все было в порядке, после того как переписал на async/await начались проблемы.

    Вот пример кода на sharp (async/await)
    return sharp( path.join( config.path.dir, '../', request.document.replace(/^https?:\/\//, '') ) )
            .resize( request.params.width, request.params.height )
            .toFile(request.params.file)
            .then()
            .catch(e => {
                throw new Error(e)
        })


    Версия sharp: "^0.18.4"

    Переписал на GM так
    function createFileGM(request) {
    
        return new Promise((resolve, reject) => {
    
            return gm( path.join( config.path.dir, '../', request.document.replace(/^https?:\/\//, '') ) )
                .resize(request.params.width, request.params.height, '^')
                .gravity('Center')
                .crop(request.params.width, request.params.height)
                .write(request.params.file, (e) => {
                    if(e) return reject(e)
                    return resolve()
            })
        })
    }


    Утечка пропала. Как вариант чтобы оставить sharp перепишу его на промисах и посмотрю что будет.
    Ответ написан
  • Как получить чистый текст запроса в node express?

    ms-dred
    @ms-dred
    Вечно что то не то и что то не так...
    Не очень понятно что нужно нужно, но может так
    res.end(JSON.stringify(req.rawHeaders))
    Ответ написан
  • Как получить по одному документу принадлежащие каждому пользователю?

    ms-dred
    @ms-dred Автор вопроса
    Вечно что то не то и что то не так...
    Отдых помогает =)
    $group: {
                        _id: "$idUser",
                        documents: {
                            $first: {
                                _id: "_id",
                                name: '$name',
                                idUser: "$idUser"
                            }
                        }
                    }
    Ответ написан
    Комментировать
  • Как частично изменить объект в MongoDB?

    ms-dred
    @ms-dred
    Вечно что то не то и что то не так...
    {$set: {time:'20:00'}}
    Ответ написан
    Комментировать
  • Как лучше организовать обработку запроса?

    ms-dred
    @ms-dred
    Вечно что то не то и что то не так...
    В схеме монгуса:
    {
        "city": { trim: true, type: String, required: true, unique: true }
    }
    Ответ написан
    Комментировать
  • Как определить позицию, номер документа в коллекции?

    ms-dred
    @ms-dred Автор вопроса
    Вечно что то не то и что то не так...
    Решил задачку, привязался к дате публикации
    db.coll.find({created: {"$lt": "время создания записи"}}).count()
    Ответ написан
    Комментировать
  • Как в JADE подгружать шаблон из папки по url категории?

    ms-dred
    @ms-dred Автор вопроса
    Вечно что то не то и что то не так...
    Нашел решение.
    На бекенде
    var jade  = require('jade');
    .......
    res.render('index', {templateRender: jade.renderFile});


    В jade
    != templateRender('полный путь до файл' + template + '.jade', options)
    Ответ написан
    Комментировать
  • Как решить проблему при запуске express nodejs?

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

    ms-dred
    @ms-dred
    Вечно что то не то и что то не так...
    Можно с помощью Nginx + до кучи мониторинг и поднятие сервера ноды при сбоях
    howtonode.org/deploying-node-upstart-monit
    Ответ написан
    Комментировать
  • Что изучать: Ruby или Node.js?

    ms-dred
    @ms-dred
    Вечно что то не то и что то не так...
    ПС. Rubu ни разу не юзал, только слышал про неё.

    Я тоже раньше на php писал, полностью перешел на node.js, знаний в котором до сих пор маловато, но хватает для запуска проектов на node, и вполне отлично работают, без сбоев. Изучаю где то 6-8 месяцев, были костыли, переписываю код по мере познаний, учусь короче на своих ошибках и правлю их. Писать на ноде интереснее, но сложнее чем на PHP, тут все упирается в знания js и знаний в возможностях node.js. JS до этого знал не особо, аля менюшку сделать, POST запрос послать, в общем скромно все, набираюсь знаниями до сих пор.

    Работает нода значительно быстрее PHP, сравнивал пересаженный проект на ноду с php, скорость отдачи контента увеличилась более чем в 2 раза, что уже говорит о многом. На PHP в данный момент нет никакого желания писать что либо, потерял к нему интерес совсем.

    Радует количество различных модулей которые как раз таки и помогают работать с node.js, сейчас опять пишу проект и вновь на node.js, очень сложный проект, но node.js + mongodb творят чудеса =) Работает неимоверно быстро при очень "жестких" выборках.
    Ответ написан
    Комментировать
  • Как установить прозрачность текста (GraphicsMagick)?

    ms-dred
    @ms-dred Автор вопроса
    Вечно что то не то и что то не так...
    Разобрался
    .fill("rgba(255,255,255,0.075)")
    Но работает только при включенном imagemagick
    .options({"imageMagick": true})
    .fill("rgba(255,255,255,0.075)")
    Ответ написан
    Комментировать