Ответы пользователя по тегу Node.js
  • Как избавиться от утечки памяти в NodeJS?

    @vshvydky
    MaxListenersExceededWarning говорит о том что воможно у тебя в коде идет бесконечная подписка на событие эвент эмиттера, если это не предусмотрено по коду, потенциально это может быть утечкой памяти
    The --trace-warnings command-line flag can be used to display the stack trace for such warnings.

    The emitted warning can be inspected with process.on('warning') and will have the additional emitter, type, and count properties, referring to the event emitter instance, the event's name and the number of attached listeners, respectively. Its name property is set to 'MaxListenersExceededWarning'.


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

    @vshvydky
    по первому вопросу, нода запускается с 1 тредом отвечающим за ЭЛ. Да все задачи выполняются из очереди последовательно и та часть задач, которые требуют системных вызовов передается на исполнение в пулл уже инициализированных тредов так же через очередь, отмечу что число тредов либЮВ можно менять, согласно документации есть соответствующие ключи при запуске. Этот механизм позволяет экономить время и ресурсы на постоянную инициализацию тредов и тем самым достигается эффективность использования существующих тредов.
    На счет монопольности треда на процессор это в любом случае иллюзия, помимо процесса запущенного в ноде в системе есть еще сотни процессов чего-то еще.
    по второму процессу, кластеризация по числу ядер в целом считается оптимальной, в виду того что при большем числе экземпляров процесса будет переключение между ними, что влечет к дополнительным расходам на исполнение приложения.
    если сравнивать с пхп и тем что каждый запрос это новый тред, то плюсы ноды в том, что нет задержек на инициализацию и закрытие треда, нет избыточной конкуренции тредов, есть максимально возможное использование каждого потока через системы очередей.
    Из минусов, ресурсов ядер может не хватать и очередь будет расти, тогда кластеризация уже будет требовать распределения нагрузки по числу машин в горизонтали.
    Ответ написан
  • Почему npm устанавливает версии пакетов отличные от указанных в package-lock.json?

    @vshvydky
    чтобы npm не пытался обновлять версии а собирал по лок файлу надо использовать команду npm ci
    Ответ написан
  • Как сделать скрипт, через сколько взломают твой пароль?

    @vshvydky
    посчитать число комбинаций используя формулы математики, умножить на среднее время исполнения функции хеширования пароля. но это все фигня потому как многие системы имеют защиту от брутфорса.
    Ответ написан
    Комментировать
  • Как отправить Base64 Вк vkio?

    @vshvydky
    https://github.com/negezor/vk-io/blob/master/docs/...
    согласно документации метод upload не поддерживает base64
    если есть возможность, стоит подумать об отказе от base64
    если такой возможности нет, всегда есть возможность
    const buf = Buffer.from(b64string, 'base64');
    Ответ написан
    Комментировать
  • Почему не работает импорт родительского класса?

    @vshvydky
    base:
    export class Base {...}

    some:
    export class Some extends Base {..}
    Ответ написан
    Комментировать
  • Как получить аудио с роута, который защищён токеном?

    @vshvydky
    если речь о том, чтобы передавать в хтмл блоки ссылки на аудио, то заголовки пробросить в элементы нельзя, итого либо для таких ссылок надо делать одноразовые билеты на скачивание и передавать их как квери парамы в ссылке, либо использовать куки, сессии.
    Ответ написан
    Комментировать
  • С чего начать изучать node.js мануальному тестировщику?

    @vshvydky
    autocannon  может помочь без изучения ноды.
    Ответ написан
    Комментировать
  • Какая правильная архитектура кода Телеграмм-бота на node-telegram-bot-api?

    @vshvydky
    то, что у бота единая точка входа, это нормально, так как у тебя есть один листенер одного типа события.
    для себя при создании подобного проекта я использовал идеи http сервера c роутом, мидлварами и хендлером обработчиком.
    По сути весь код раскладывается на файлы хендлеров, которые мапаются к тем или иным командам, пропуская между роутом и хендлером через мидлвары безопасности
    итоговая картинка может быть следующей:
    1. пишешь движок, который воспроизводит обработку всей логики для события из листенера.
    2. описываешь карту роутов из серии route.add("/start", startHandler), route.add("/get_price", authMW, getPriceHandler)
    3. описываешь сами handlers где определяешь достаточный объем входящих в функцию параметров для работы твоего бота.
    Ответ написан
    1 комментарий
  • 10 000 строчек проще рефакторить или переписать?

    @vshvydky
    Отличие в нескольких строчках кода и отсутствие разделения на слои может говорить о двух вещах.
    Первая, быстрые хотелки в изменениях проекта и скорость с которой его писали. Второе, уровень разработчика. Увы из практики ревью проектов на ноде, могу сказать что как минимум каждый второй проект это велосипед.
    Ответ написан
    Комментировать
  • Разработка: сервер - node.js, клиент - vue.js. Как совместить?

    @vshvydky
    nginx -   фронт бандл статика, апи прокси пасс на инстанс ноды (апстрим)
    Ответ написан
    Комментировать
  • Как поставить на VDS node.js телеграм бота, который работает на webhook?

    @vshvydky
    webhook это точка куда телеграм на эндпоинт присылает информацию, localhost явно невалидная история.
    вариантов два, либо пиши реальный хост своей впс, либо не используй вебхуки и пусть телега пуллится...
    Ответ написан
    Комментировать
  • Как дождаться выполнения сurl?

    @vshvydky
    правильнее не юзать курл, есть fetch, got, axios , request
    Ответ написан
    Комментировать
  • Объясните что такое Node.js и как он(-а, -о) работает?

    @vshvydky
    Node.js это платформа, соединяющая в себе несколько технологий.
    Выполнение с использованием движка хромиум V8.
    Обработка цикла событий реализована с помощью LibUV.
    Стандартные библиотеки node.js реализованы на СИ и обеспечивают взаимодействие с операционной системой, файловой системой, сетью, вводом выводом и тп.

    NPM пакетный менеджер (по сути репозиторий внешних модулей для js), поставляется так же с пакетом Node.js и предоставляет возможность использовать модули, там опубликованные другими авторами.

    Node.js - это однопоточная асинхонная среда исполнения, перед началом программирования на js желательно плотно почитать документацию по самому js, далее документацию по nodejs https://nodejs.org/

    Node.js на первый взгляд выглядит быстрым входом в написание серверного кода или серверных исполняемых скриптов, однако, эта доступность является достаточно сильным минусом, потому что позволяет тем, кто не удосужился изучить ее поглубже творить архитектурных инвалидов, что рано или поздно приводит к тому, что такие проекты выглядят плохо.

    Отдельно, про программирование под устройства, node.js не компилирует свой код, а потому на любом устройстве у тебя будет набор твоих файлов плюс все пакеты из node_modules, которые ты наустанавливаешь. Естественно у тебя на любом устройстве должен быть уже node.js или должна быть возможность туда его установить.

    Из явных плюсов, писать бек и фронт на одном языке, достаточно зрелое комьюнити и много пакетов, доступных в npm, для решения многих задач.

    Из явных минусов, из-за недостаточного знания js и понимания работы цикла событий люди очень часто пишут ужасный код, который получается очень сложным.
    Ответ написан
    Комментировать
  • Управляемый мультибот telegram?

    @vshvydky
    стоит подумать о работе с хуком телеги, сделать эндпоинт куда прилетают события на разных ботов и обрабатывать их в своем контексте соответственно
    все настройки в бд и пару сервисов которые в зависимости от контекста работают с нужным ботом.
    Ответ написан
    Комментировать
  • Как правильно отправить ответ на socket.io в ответ на запрос пользователя?

    @vshvydky
    Socket.io из коробки дает возможность использовать room.
    Флоу использования румов:
    1. Клиент коннектится к сокету, проверяется токен пользователя, из него получается id пользователя.
    2. Текущий сокет джойнится комнату с идентификатором пользователя (читай доку про join).
    3. Сообщения пользователю отправляются как to(roomName).emit...
    Какой профит имеем?
    1. Не важно сколько страниц открыто у пользователя, не надо руками мапать какой сокет к какому юзеру и сколько сокетов открыто у одного пользователя.
    2. Маршрутизация сообщений уходит на уровень кода библиотеки.
    3. Другим пользователям не поступают сообщения , которые адресованы конкретному пользователю.
    Ответ написан
  • Как в node.js получить переменную за областью mysql?

    @vshvydky
    результат qwery асинхронный и передается в коллбек, именно в твоем кейсе никак, а вообще надо учить js
    потом промисы и асинк функции, после этого получится как тебе хочется.
    Ответ написан
    Комментировать