• Какую библиотеку запросов использовать в node.js?

    Robur
    @Robur
    Знаю больше чем это необходимо
    request-promise обертка над request, у которого есть работа с прокси
    https://github.com/request/request#proxies
    Ответ написан
    Комментировать
  • Как правильно работать с сессиями в reactjs?

    Robur
    @Robur
    Знаю больше чем это необходимо
    Вашему фронтендщику стоит посоветовать сначала изучить как это делается а потом огород городить.
    но судя по тому что вы вместо него это выясняете, его все устраивает а вас - нет.

    Так конечно никто не делает, есть понятия аутентификации и авторизации, сессия устанавливается после аутентификации (пользователь подтверждает что он - это он) и потом этот пользователь авторизуется с каким-то правами и в сессию каким-нибудь подходящим образом ставятся атрибуты авторизации, в простейшем случае - роль пользователя (админ/юзер). Эти атрибуты фронт может запросить у бэка отдельным запросом или получить в ответе на /login.

    Не очень понятно что значит "запрос для входа пользователя" и "запрос для входа менеджера" -
    у вас предполагается что пользователь будет нажимать на разные кнопки "войти как менеджер" и "войти как пользователь" или что?

    Нормально так:
    Кнопка для логина - одна.
    запрос аутентификации - один.
    сервер отвечает ошибкой или успешным ответом. Сама сессия ставится кукой, эта кука по хорошему должна быть httpOnly и из js кода не доступна. С ней работает исключительно бэкенд и так как хочет.
    Аппа из ответа сервера (в body) либо сделав отдельный запрос (типа /currentUser) понимает что это за пользователь - менеджер или обычный и сохраняет это куда-то себе. В случае реакта это с большой вероятностью стор. Можно в localStorage чтобы при перезагрузке читать сразу оттуда.

    Дальше аппа просто смотрит в стор в нужные моменты чтобы понять что пользователю показывать что нет.
    Все права на запросы бекенд разруливает на основе сессионной куки которая приходит с каждым запросом автоматически. То есть сессии как таковой фронт вообще никак не касается - его дело - вызывать login/logout, получить от бэка инфу о текущем юзере и правильно обрабатывать 401.

    Можно сделать и более сложные варианты - без куки, с каким-нибудь токенами и прочим, но скорее всего вашему фронтэндщику еще рано.
    Ответ написан
    Комментировать
  • Убрать hash и вернуть url без #, как?

    Robur
    @Robur
    Знаю больше чем это необходимо
    a.addEventListener('click', function () {
    	setTimeout(() => history.replaceState({}, '', locationWithoutHash))
    })


    после этого ссылка при наведении мыши вместо http://site.ru/#portfolio покажет http://site.ru/portfolio#portfolio но с этим можно жить (и даже нужно чтобы анкоры продолжали работать), зато страница проскроллится куда вам надо и в адресной строке будет http://site.ru/portfolio
    Ответ написан
  • Где хранить данные пользователя?

    Robur
    @Robur
    Знаю больше чем это необходимо
    Есть два варианта:

    1) хранить роль там же где у вас хранится пользователь (вы не указали откуда он берется - локальная бд, oauth, хз что еще) и получать роль как атрибут юзера в req.user
    2) сделать таблицу в своей базе где хранить роли для каждого пользователя - для каждого id хранить роли. при необходимости получить роль делать запрос в базу с id из req.user, получать роли и делать то что нужно.

    UI может получать роли или из токена (если например это OAuth/OpenID) или делать запрос на сервер при загрузке приложения/логине и получать роли оттуда.
    Ответ написан
    2 комментария
  • Какая на ваш взгляд лучшая система мониторинга удаленных сотрудников?

    Robur
    @Robur
    Знаю больше чем это необходимо
    Самая лучшая система - грамотное управление и подбор персонала.
    Никакими техническими средствами вы не решите организационный факап, если работник не справляется, динамит и прочее - предупреждение, разговор и досвидания.
    Для хорошего профессионала постоянный контроль - демотиватор, для плохого - повод потратить время на то чтобы обмануть систему, работать он все равно не будет.
    Если есть доверие, основанное на опыте - то можно решать вопросы типа "заболел/уснул/внезапно свадьба" без особых проблем. Если доверия нет - то контроль потратит тонну времени и сил, которые лучше потратить на поиск другого сотрудника.
    Конечно большинство людей нужно немного "держать в тонусе", но для этого достаточно время от времени спрашивать как дела и что уже сделано.

    Если хотите больше KPI чтобы обосновывать свои решения - то для вас возможно подойдет как раз вариант с jira/etc, можно отмечать начало работы над задачей, окончание, вести учет сколько задач закрыто/переоткрыто среднее время выполнения, можно просить ставить estimate и сравнивать с реальным потраченным временем и так далее.
    Это потребует хорошей дисциплины и достаточно грамотной формализации работы, но вполне реализуемо.
    При приеме на работу сразу говорите что работать будем вот так.
    Ответ написан
    Комментировать
  • Что идет вначале Frontend или Backend?

    Robur
    @Robur
    Знаю больше чем это необходимо
    Как договоритесь. Главное - чтобы работа шла эффективно.
    В одном проекте сначала полгода можно пилить бек, потом за недельку фронт, в другом наоборот, в третьем нужна постоянная коммуникация и держать друг друга в курсе каждый день, и изменения могут быть первичны и в беке и во фронте.
    Это если в команде хороший профессиональный уровень и взрослые люди, которые понимают зачем они там собрались. В реальной жизни можно встретить всякое, вплоть до истерик по поводу кто кому чего "должен" - и пока вы в конкретную команду не попадете, не узнаете заранее.

    Так же есть разные специалисты - если это хороший фуллстек, и проект позволяет, то ему не составит труда пойти во фронт и бек и сделать сразу все что нужно. Если это монорепа это может быть вообще один коммит.

    Так же есть разные методологии и подходы, например не разделение на фронт и бек команды а разделение на фича-команды. Когда одна команда пилит сразу и фронт и бек и что там еще нужно чтобы выкатить фичу в релиз.
    Ответ написан
    Комментировать
  • Linux для frontend developer`a?

    Robur
    @Robur
    Знаю больше чем это необходимо
    Варианта по большому счету два - линукс и мак. Виндовс не берем - можно но заметную часть своего времени вы будете тратить на внезапные проблемы которых без винды у вас бы не было.
    И то и то подходит хорошо, мак лучше тем что можно собирать приложения под ios, линукс лучше тем что за те же деньги вы купите заметно мощнее комп и разработка будет приятнее.
    Ответ написан
    Комментировать
  • Правильно ли обрабатывать данные в контейнере React компонента?

    Robur
    @Robur
    Знаю больше чем это необходимо
    Можно и так, можно и в reducer, или actions. Действия с данными делать надо там где это уместно, а уместность зависит от того что именно вы делаете.

    Если эта логика только для данного компонента, чтобы привести данные из формата в котором они лежат в сторе к формату который нужен компоненту, и нет смысла класть фильтрованные данные в стор - фильтруйте в коннекте.
    Если эта фильтрация нужна на уровне данных в сторе (то есть профильтровать данные которые пришли откуда-то перед тем как их привести в формат который должен лежать в сторе) - фильтруйте в редьюсерах или экшенах.
    Ответ написан
    Комментировать
  • Можно ли использовать MobX с Apollo?

    Robur
    @Robur
    Знаю больше чем это необходимо
    Можно.
    Apollo в своем кэше может хранить все данные приложения относящиеся к серверу (фактически это все кроме состояния UI и еще пары мелочей типа сессии пользователя)

    Так что в mobx просто становится меньше смысла, но совсем он не пропадает - если вам нужно зачем-то шарить состояние компонент друг между другом.

    Ребята в Apollo предлагают его же использовать как стор и обращаться к локальному состоянию с помощью gql так же как и к удаленным данным. Не уверен насколько такой подход реально удобен в работе с состоянием компонентов, но возможность добавить какие-то локальные свойства к данным весьма неплоха.
    вот тут можно почитать: https://www.apollographql.com/docs/react/essential...
    Ответ написан
    Комментировать
  • Является ли использование метода toComponent частью какого то соглашения?

    Robur
    @Robur
    Знаю больше чем это необходимо
    То что разные программисты в одном проекте писали одинаково - это признак хорошего проекта и хороших программистов. Или в проекте было такое принято явно, тогда это соглашение для проекта или так сложилось и это просто не меняют.

    "вообще" соглашения такого нет, да и вообще каких-то общих практик за пределами рекомендованного в доках довольно мало.
    Ответ написан
    Комментировать
  • Как в React передать props в state полученные с помощью connect?

    Robur
    @Robur
    Знаю больше чем это необходимо
    вам поможет https://reactjs.org/docs/react-component.html#stat...
    но на самом деле вам нужно использовать props напрямую, в state хранить только то что может поменяться в процессе работы самого компонента при неизменных пропсах
    Ответ написан
    Комментировать
  • Где хранить переиспользуемые интерфейсы typescript?

    Robur
    @Robur
    Знаю больше чем это необходимо
    Законно, по крайней мере пока еще не запретили, но возможно мы к этому когда-нибудь придем.
    Храните как вам удобно - интерфейсы бывают разные, если это вообще глобальные - то в один файл в корне, но таких на самом деле обычно мало и больше тайп-конвертеры.
    Чаще всего интерфейсы описывают какие-то сущности, кладите их туда же где и код который отвечает за эти сущности.
    Например если у вас есть стор и в нем какие-то данные описанные интерфейсами - кладите рядом с данными и экспортируйте оттуда.
    Если есть апи которое возвращает данные и для этих данных есть интерфейсы - кладите рядом с апи. И так далее.
    Можно прямо в файлах с логикой, можно рядом в файле чисто с интерфейсами. Мне удобнее все в одном - так как если что-то меняется в интерфейсе то обычно меняется вместе с логикой.
    Ответ написан
    Комментировать
  • Как в WebStorm правильно использовать vue + node js в одном проекте? И несколько других вопросов по тематике?

    Robur
    @Robur
    Знаю больше чем это необходимо
    1) очень странная штука - у вас гит сам по себе работает? Лучше создавать проекты через терминал, а не встроенными в вебшторм мастерами. По старинке - создайте папку, сделайте репу, инициализируйте npm, и все такое
    2) нормально. Располагаться на сервере будет как вашей душе угодно. Хоть на разных серверах.
    3) чтобы nodejs приложение работало нужна нода. Чтобы работало vue приложение - проще всего создать через https://cli.vuejs.org/ - там все будет уже для разработки вместе с вебсервером. Отдельный вебсервер надо только для продакшена.

    А гуглить все же полезно.
    Ответ написан
    Комментировать
  • Использование React в non-SPA?

    Robur
    @Robur
    Знаю больше чем это необходимо
    так же как и vue.
    подключаете js в котором инициализация реакт - приложения в нужный контейнер.
    Данные туда можно передавать по разному, я бы просто в js положил в глобальный объект какой-то.
    Ответ написан
    Комментировать
  • Стоит ли идти на работу верстальщиком писем, если хочу быть Front-endером, но пока не берут?

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

    Robur
    @Robur
    Знаю больше чем это необходимо
    async foo() {
     // тут всякое
      await foo()
     //тут всякое другое
    }
    Ответ написан
    2 комментария
  • Как найти функцию, выполняемую генерацию токена для заголовка?

    Robur
    @Robur
    Знаю больше чем это необходимо
    поставьте брейкпоинт и задебажьте
    Ответ написан
    Комментировать
  • Почему на моём vps стоит 24 маска. Разве 32 не была бы безопаснее?

    Robur
    @Robur
    Знаю больше чем это необходимо
    Если вы поставите маску /32 - у вас там будет только один хост в сети а надо минимум 3 - ваш сервер, роутер, и broadcast. Так что сеть может быть как максимум /30. И хостеру придется для каждого пользователя такую сеть создавать и в каждую выставлять роутер по дефолту.
    При публичных IP смысла в этом нет - вы все равно будете способны их точно так же пропинговать, ровно как и любой другой адрес в интернет, зато адреса расходуются впустую.
    Ответ написан
    Комментировать
  • Как скрыть конфиги в js веб-приложении?

    Robur
    @Robur
    Знаю больше чем это необходимо
    Как сделать так, что бы объекты конфигов, используемые в модулях, не попали в финальный билд?

    через https://webpack.js.org/plugins/ignore-plugin/. Правда весь код который их использует сломается.

    Или попали в него но так, что бы юзер не смог их "прочесть"?
    Учитывая что сами модули, использующие эти конфиги, должны в финальном билде присутствовать.
    Тоесть мне нужно скрыть эти конфиги от возможности просмотреть их инспектором кода или путем выкачивания билд файла конечным пользователем, либо любым другим способом.

    Только на уровне "бабушкиной защиты" - можно сделать так что ваша бабушка не сможет, но всегда найдется тот кто сможет.

    Какой бест практиз существует в этом случае?


    варианта два - либо вы правильно проектируете систему и обеспечиваете защиту на стороне firebase или что там у вас и за счет грамотного разделения прав доступа, если это позволяет проект
    Вы же, я надеюсь, не используете в качества API токенов те которые дают полный доступ к базе? :)

    либо недостающее должен предоставить пользователь каки-либо образом.
    Ответ написан
    Комментировать
  • GraphQl или Rest api для интернет магазина?

    Robur
    @Robur
    Знаю больше чем это необходимо
    Интернет - магазины не писал но с GraphQL работаю плотно последний год - и я бы взял его для такой задачи.
    Они хорошо ложатся друг на друга - GrapqhQL позволяет вам вытаскивать любые данные в том виде в котором надо клиенту и сделать это максимально продуктивно на сервере.
    Если взять Apollo Client то многие проблемы с кешем, оптимизацией запросов и прочим он решит за вас.
    К тому же всякие вещи в духе "добавили поле и через месяц выяснилось что где-то забыли код обновить" находятся сразу, особенно если вы пишете на TS
    Ответ написан
    Комментировать