• Что не так при записывании в переменную?

    potapchino
    @potapchino
    let { id, name } = ctx.request.body;
    let user = {
      id,
      name
    }
    Ответ написан
    Комментировать
  • Возможно ли на данный момент создание бота WhatsApp?

    kawabanga
    @kawabanga
    Не советую.

    https://github.com/mgp25/Chat-API
    В свое время, это была самая активная библиотека. Посмотрите последнее обновление - 3 года назад. Года 4 назад по заданию писал спам бота, с авторегами и тд. Получалась очень нестабильная штука.

    По мне, если вам определенные отчеты нужны, то лучше использовать мессенджер где это поддерживается, либо просто рассылку на емаил.
    Ответ написан
    1 комментарий
  • Можно ли это назвать хорошей практикой?

    Ni55aN
    @Ni55aN
    Обычные .js скрипты принято называть в kebab кейсе. Если JS скрипты содержатся не в чистом виде, а скажем в React компонента (.jsx) или Vue компонента (.vue), тогда в Pascal-кейсе
    Ответ написан
    Комментировать
  • Можно ли так назвать таблицу?

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

    Например: https://www.sqlstyle.guide/ru/
    Ответ написан
    Комментировать
  • Можно ли так назвать таблицу?

    @TelepnevDmitriy
    Senior Web Developer
    MySQL, по-моему, не чувствителен к регистру.
    Можно ли назвать - зависит от договоренностей команды(или выбора стиля одного человека)
    Ответ написан
    2 комментария
  • Как удобно реализовать роутинг при большом списке роутов на Koa?

    @afanasiyz
    Javascript-разработчик
    Мы разносили роуты + модели для каждой абстракции (users, clients, cards) по отдельным папкам, и у вас соответственно в корне есть папки users, clients, cards, и внутри подпапки routes и models.
    а в индексе просто делается несколько app.use для каждого набора роутов.

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

    DexterHD
    @DexterHD
    Software Engineer, Teamlead, CTO
    Я бы предложил вообще вынести список роутов в один файл. Ведь по сути роутинг это просто связывание хэндлеров с определенным URL (Иногда с привязкой middleware посередине).
    Далее этот файл положить в одном каталоге с точкой входа в приложение и в него уже заимпортить реализации хэндлеров из тех модулей которые необходимы.

    Это позволит полностью отделить реализацию от путей. А так же позволит не запутаться в огромном кол-ве путей и групп, т.к. они будут в одном месте.

    // routes.js
    import users from './users';
    import posts from './posts';
    
    router
      .get('/', app.homeHandler)
      .get('/posts', posts.listHandler)
      .post('/users', users.createHandler)
      .put('/users/:id',  users.changeHandler)
      .del('/users/:id', users.deleteHandler)
      .all('/users/:id', users.allHandler);
    Ответ написан
    Комментировать
  • Как сравнивать даты?

    dasha_programmist
    @dasha_programmist
    ex Software Engineer at Reddit TS/React/GraphQL/Go
    momentjs.com/docs/#/query

    глянь тут есть описания методов isSame, isBefore, isAfter и подобных, думаю это то, что нужно
    Ответ написан
    1 комментарий
  • Как правильно использовать инструменты для суммирования даты на momentjs?

    nakree
    @nakree
    Fullstack Developer
    https://momentjs.com/docs/#/manipulating/add/
    Что может быть проще и понятней чем документация?
    const duration = '30';
    const startTime = moment().format('DD-MM-YYYY') // 26-10-2018
    const endTime = moment().add(duration, 'days').format('DD-MM-YYYY') // 26-11-2018


    const duration = {
       years:  '1',
       months: '5',
       days: '30'
    };
    const startTime = moment().format('DD-MM-YYYY') // 26-10-2018
    const endTime = moment().add(duration).format('DD-MM-YYYY') //  примерно 25-05-2020
    Ответ написан
    1 комментарий
  • Как запускать sh файлы на сервере используя nodejs?

    Ответ написан
    Комментировать
  • Как запускать sh файлы на сервере используя nodejs?

    POS_troi
    @POS_troi
    СадоМазо Админ, флудер, троль.
    В ноде я профан но судя по докам, совет Михаил Коробков в тему.
    Но вы должны понимать что давать приложению возможность выполнять что-либо от имени рута - очень плохая затея и тут необходимо полностью вылизать функцию которая будет обрабатывать это всё + всё приложение от дырок ибо любая оплошность может вылить в неприятную ситуацию.

    Не делайте ошибок!
    Вынесите функцию запуска таких вещей в отдельное приложение, под отдельным пользователем и общение с эти приложением только через API и только с чётко определёным списком допустимых параметров.

    P.S. sudo настраивается, для конкретного пользователя и вплоть до "спрашивать/ не спрашивать пароль" и какие именно приложения можно запустить так. Об этом так-же слдует позаботиться и не давать возможность sudo для всего и вся.
    Ответ написан
    1 комментарий
  • Где я упустил ошибку?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Объявление DeliveryCalculator - перенесите его выше объявления переменной calculator, или замените function expression на function declaration.

    UPD. У вас там в конструкторе вызывается метод, добавленный в прототип... Переносите выше всё, не только объявление функции, но и модификацию её прототипа.
    Ответ написан
    1 комментарий
  • С чего начать изучение для Настройки VPN сервера?

    Хотелось бы у вас уточнить, нужен ли Linux, или может какая та другая ОС.
    Многое ПО для VPN написано сразу под различные платформы (Linux, *BSD, Windows, iOS, Android).

    Я принципиально хочу использовать новейшие «патчи» отвечающие за безопастность.
    Основная безопасность крутится вокруг ключей (паролей): тип, размер, как к ним осуществляется доступ, как создаются, как они хранятся, как распространяются, как уничтожаются. Остальные 5% не так существенны.

    Помимо этого всего, как я могу автоматизировать регистрацию пользователей по их ip или может по серийному номеру устройства. Как вы посоветуете.
    ip вещь не постоянная особенно для мобильных устройств. Если сотрудник будет работать со стационарного компа, откуда у него серийный номер? Привязка по МАС-адресу будет ближе к делу, но это не панацея.

    Так как приложение будет платной(€0.10/неделю), я хочу разузнать об этом.
    Ещё надо учитывать, что сети провайдера - это государства в государстве со своими писанными и очень законами. Поэтому надо знать возможные закидоны прова: блокирование трафика ipsec, замедление или даже блокировка стороннего udp трафика в пределах последней мили, ...
    Ответ написан
    Комментировать
  • С чего начать изучение для Настройки VPN сервера?

    CityCat4
    @CityCat4 Куратор тега VPN
    Внимание! Изменился адрес почты!
    Подключаться будет наш коллектив.

    Так как приложение будет платной(€0.10/неделю)

    Я один вижу тут противоречие? Будете брать бабло с колллектива? Ну это конечно Ваше дело... Ну и Вы, наверное, не из РФ. Потому что в РФ ты либо сотрудничаешь с РКН и не пускаешь никуда, куда не надо (по мнению РКН), либо не работаешь в РФ. Не знаю, как насчет выполнимости этого закона, но он есть...
    Ответ написан
    Комментировать
  • С чего начать изучение для Настройки VPN сервера?

    @notwrite
    Начать с изучения маршрутиризации в сетях ip, оно очень пригодится, судя по вопросам на тостере.
    Вот тут всё подробно с примерами расписано
    https://openvpn.net/index.php/open-source.html
    Ответ написан
    Комментировать
  • С чего начать изучение для Настройки VPN сервера?

    @hx510b
    "Я знаю, что ничего не знаю"
    Рекомендую настраивать OpenVPN, это стандарт де-факто в индустрии, поддерживается практически всеми операционными системами.
    Надо найти любую инструкцию как настроить VPN на основе OpenVPN и выполнить ее и получить работоспособную систему, затем менять ее под свои потребности.
    Ссылки: https://habr.com/post/233971/ или https://habr.com/post/188474/
    Ответ написан
    1 комментарий
  • Как реализовать навигацию - переходы по компонентам?

    raoffonom
    @raoffonom
    React Native Developer
    Существует один способ навигации в вглубь(по вертикали) приложения - это StackNavigator и два способа по поверхности(по горизонтали) приложения - TabNavigator и DrawerNavigator

    Примеры кода:
    TabNavigator + StackNavigator + Redux
    SimpleDrawer
    DrawerNavigator + StackNavigator + Redux

    Update:
    Решил снять по этой теме видео курс - React Navigation(v2)
    Ответ написан
    1 комментарий
  • Как составить компонент грамотно?

    rockon404
    @rockon404 Куратор тега React
    Frontend Developer
    1. Статические данные. Зачем они определяются каждый render? Их можно вынести за пределы компонента:
    const paths = [ ... ];
    class Menu extends Component { ... }

    А по-хорошему генерировать роуты и переключать страницы по одним и тем же данным:
    import routes from './routes';
    
    /* ... */
    
    <Switch>
      {routes.map(route => (
        <Route
          exact={route.isExact}
          path={route.path}
          component={route.component}
        />
      )}
    </Switch>


    2. По какой логике используете ключевые слова const и let? Используйте const для всех переменных которые не переопределяются в коде, а let только для тех, которые переопределяются. Это заметно снижает когнитивную нагрузку с читающего код.

    3. Конструкции вроде:
    let
      isPrev = currPathIndex !== 0,
      isNext = currPathIndex !== paths.length - 1;

    часто вызывают проблемы при рефакторинге. Лучше не экономить на спичках и писать ключевые слова для каждой строки:
    const hasPrev = currPathIndex !== 0;  // (1)
    const hasNext = currPathIndex !== paths.length - 1; // (2)

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

    (1), (2) - обратите внимание, что я заменил префикс is на has, что правильней. Для булевых переменных помимо is, можно использовать следующие префиксы is, has, should и подобные. Примеры:
    isVisible
    hasChildren
    shouldShowCloseButton


    4. Если используете много ключей из state и props можно сделать деструктуризацию:
    const { isOpen } = this.state;

    5. Don't repeat yourself. Код который вы используете многократно старайтесь выносить в отдельные компоненты:
    <Link className="next_btn" style={ this.state.isOpen ? {visibility: 'hidden'} : null} to={paths[currPathIndex + 1].link}>
      <span>{ paths[currPathIndex + 1].title }</span>
    </Link>

    Его можно переписать компонентом с примерно таким интерфейсом:
    <NavButton prev isVisible={!isOpen} path={prevPath} />


    6. Зачем тернарки там где лучше подойдет &&?
    {isOpen && this.renderСloseBtn()} // (1)
    {hasPrev && <NavButton prev isVisible={!isOpen} path={prevPath} />}
    {hasNext && <NavButton next isVisible={!isOpen} path={nextPath} />}

    (1) - обратите внимание, что рендер кнопки вынесен в отдельный метод, так она будет создаваться только тогда, когда она нужна. В вашем же коде она определяется даже тогда когда не добавляется на страницу.

    Используйте тернарный оператор в render, там где есть альтернативный вариант:
    {isFetching ? <Preloader /> : <Content data={data} />}

    Но не используйте вложенных:
    {isSignedIn ? isMobile ? <UserMenuMobile /> :  <UserMenuDesktop /> : <MainMenu /> }

    Лучше так:
    {isSignedIn ? this.renderUserMenu() : <MainMenu /> }

    где this.renderUserMenu:
    renderUserMenu() {
      return this.props.isMobile ? <UserMenuMobile /> :  <UserMenuDesktop />;
    }


    7. Старайтесь не писать избыточных конструкций:
    class Menu extends Component {
      constructor(props) {
        super(props);
          this.state = {
              isOpen: false,
          };
      }
    }

    При использовании прессета stage-0, create-react-app, jsfiddle и прочих библиотек/бойлерплейтов/сервисов, использующих плагин babel-plugin-transform-class-properties, достаточно:
    class Menu extends Component {
      state = {
         isOpen: false,
      };
    }
    Ответ написан
    1 комментарий
  • Как составить компонент грамотно?

    0xD34F
    @0xD34F Куратор тега React
    Как Вы думаете, как бы написал опытный реакт-разработчик...
    Я конечно таковым ни разу не являюсь, но всё-таки скажу пару слов.

    проверки через тернарный оператор внутри render?
    Это окей - conditional rendering.

    render() {
        const paths = [
    Из метода render массив paths следует убрать. Может быть, его даже стоит сделать параметром компонента.

    onClick={ () => {this.setState({isOpen: !this.state.isOpen})} }
    Следует сделать метод. Создавать при каждом вызове render новый обработчик - само по себе не очень здорово, ну и ещё этот код повторяется дважды.

    this.props.history.listen(...
    Если предполагается, что во время работы приложения экземпляр компонента будет создаваться несколько раз, то при удалении экземпляра надо снимать обработчик, иначе вывод в консоль задвоится (затроится, зачетверится,...). Сделать это несложно - listen возвращает функцию, снимающую обработчик, так что:
    componentWillMount() {
      this.unlisten = this.props.history.listen(...
    
    componentWillUnmount() {
      this.unlisten();


    <Link className="next_btn"...
    <Link className="prev_btn"...
    Выглядят подозрительно похожими. Я бы рассмотрел вариант сделать под них отдельный компонент, который бы получал isOpen и свойства объектов paths[currPathIndex +/- 1] в качестве параметров.
    Ответ написан
    1 комментарий