Aelliari, а вы как обновляли? Через System > Packages > Check for Updates > Chanel=development? При успешном апдейте конфигурация устройства не сбрасывается?
Я неясно выразился, когда назвал провайдера "резервным". Это просто дополнительный провайдер, который "обслуживает" определенные IP-адреса подсети. Если основной (дефолтный) провайдер накроется, дополнительный не должен его заменять.
Какой вывод я делаю: роут основного провайдера всегда должен иметь самый приоритетный дистанс. У всех статических роутов для "локальных" провайдеров дистансы лучше поставить, например, 5 и выше, чтобы они не путались с резервным провайдером, если такой все же появится.
Drno, там проблема в том, что у дополнительного провайдера своя таблица маршрутизации (это сделано для того, чтобы к данному провайдеру имели доступ не все, а только PPPoE клиенты с определенных IP-адресов). Выше есть скрин Policy Routing Rules. Так вот, чтобы эта дополнительная таблица маршрутизации работала, я не нашел другого способа, кроме как сделать роутер для резервного провайдера статическим. То есть в самом DHCP-клиенте, по которому роутер получает интернет от резервного провайдера, пришлось снять флаг Add Default route. А раз этот флаг снят, то и значение Distance для данного канала становится не редактируемым. То есть мне действительно ничего не остается, кроме как на уровне роутов настраивать?
Сергей delphinpro, еще раз спасибо. С модульностью вроде разобрался. Добавление класса FormHandler к window действительно помогло.
Но хочется разобраться, как все-таки работать со скриптами, которые вызываются с определенных страниц за счет прописанных в html-коде идентификаторов. Дело в том, что у меня названия форм фигурирует в css-классах. Например: <form class="reg-form">
Я вижу два варианта:
Первый, это тот, который вы предложили: экспортировать класс в глобальный объект window, а вызов скрипта (создание экземпляров класса для обработки каждой формы) делать вручную с нужных страниц.
Второй вариант, по сути, оптимизирует первый. В этом случае я создаю обработчик, который помещается в бандл и после загрузки DOM ищет теги form, получает из классов идентификаторы форм и создает экземпляры FormHandler. Получается мини-фреймворк для работы с формами.
Вот насколько это направление верно с точки зрение архитектуры? Или вы бы посоветовали копнуть в другом направлении?
Спасибо за подсказку! Я вынес скрипт с инициализацией хендлера в отдельный файл и добавил директиву defer. Если я помещаю оба скрипта перед закрывающим тегом body, то все работает:
Однако когда я переношу FormHandler в bundle.js (который находится до открывающего тега body) то снова получаю ошибку, что класс обработчика формы, который я пытаюсь вызвать в signupPageScript.js, не определен.
Правильно ли я понимаю, что мне теперь нужно настроить webpack таким образом, чтобы класс FormHandler добавлялся бы не в bundle.js, а в отдельный файл, который подключался бы перед закрывающим тегом body?
Еще думаю над вариантом организовать PPPoE сервер на маршрутизаторе для каждого провайдера и создать для каждого пользователя учетку на нужном сервере. Подробнее описал в ответах.
Дмитрий, мне нужно нативными средствами Windows (без написания менее надежных скриптов) обеспечить выход в интернет каждого пользователя под своим провайдером. PPPoE можно создать для конкретного пользователя и запретить его использование другим. А если подключение идет "по кабелю", то он виден всем пользователям (особенно при их быстром переключении).
Я так понимаю, что оба варианта можно реализовать на базе маршрутизатора Mikrotik?
Вариант с 802.11x будет надежнее? То есть если VPN по каким-то причинам не поднимется, то будет использована стандартная сеть?
Прошу прощения за глупые вопросы, просто я плохо разбираюсь в сетевых технологиях. Придется вникать.
Владимир Дубровин, вы меня убедили, что JWT в моем случае не нужен. Просто хотел "пощупать" эту технологию на своем первом проекте. Может быть, вы посоветуете хорошую статью или видео по грамотной реализации сессий? Я не уверен, что нужно использовать для этого Passport... Просто хочу обойтись минимумом фрейморков, чтобы разобраться, как все работает на низком уровне.
Спасибо за подсказку. Я думал, можно вывалить в консоль "сырые" данные. Кстати, бодипарсер уже встроен в экспресс, поэтому его не нужно отдельно устанавливать и подлючать к проекту. Достаточно: const jsonParser = express.json();