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

    @bromzh
    Drugs-driven development
    Можно упростить жизнь

    Да. Можно писать jsdoc, webstorm умеет их анализировать и извлекать типы. Или можно использовать https://flowtype.org/
    Однако, это поможет только для своего кода. Чтобы нормальный автокомплит был и для сторонних либ, можно на вкладке libraries подключить для каждой из библиотек файлы с типами (.d.ts). Вот видео

    Самый лучший вариант - писать всё на TypeScript. А файлы с типами для подключаемых библиотек легко подключаются через npm-модуль typings. При правильной настройке, вебшторм будет подсказывать очень точно.
    Ответ написан
    Комментировать
  • Какими способами можно получить аргументы из консоли в typescript?

    @bromzh
    Drugs-driven development
    import * as yargs from 'yargs';
    console.log(yargs.argv);


    Но надо понимать, что аргументы yargs, получаемые в конфиге вебпака просто так не будут доступны в собираемом им коде. Можно использовать DefinePlugin, например.
    Ответ написан
    6 комментариев
  • Как сделать поддержку нескольких языков в Node.JS + MongoDB?

    @bromzh
    Drugs-driven development
    * В монге можно строить индексы искать по текстовым полям с учётом языка. См. тут и тут.
    * Можно просто хранить переводы в любом удобном формате, а при запросе к монге получать только необходимые.
    * Если строки, для которых нужны переводы ограничены и заранее известны, то можно хранить переводы в отдельных файлах. В монге, например, хранить только ключ, по которому будет браться перевод. Плюс в том, что править переводы так намного проще и можно поручить это дело людям, не знающим про монгу, ноду и другие страшные слова. Гуглить нужные библиотеки можно по словам `nodejs i18n`.

    Ну и в любом случае, надо как-то получить информацию о локали пользователя. Брать её можно из заголовка `Accept-Language`, из кук или из профиля пользователя.
    Ответ написан
    Комментировать
  • Почему ругается компилятор typescript?

    @bromzh
    Drugs-driven development
    Немного поправлю Евгения, достаточно объявить нужное поле в классе, тип можно не ставить:
    export class AppComponent {
        sommm; // Можно и без типа, зависит от настройки компилятора
        title = 'hero';
        hero: Hero = {
          id: 1,
          name: 'Wind'
        }
        constructor (){
          this.sommm = 'from this some'
        }    
     }


    Или ещё можно добавить модификатор в аргумент конструктора:
    export class AppComponent {
        // В Angular 2 так можно делать в классах, 
        // которые не являются компонентами/директивами/сервисами/пайпами и т.п.
        constructor (public sommm: string = 'from this some') {}   
     }
    // Это аналогично такому:
    export class AppComponent {
        sommm: string;
        constructor (sommm: string = 'from this some') {
            this.sommm = sommm;
        }    
     }

    Но типы всё-таки лучше указывать.

    UPD 0. В TypeScript обычно, если переменная имеет тип, отличный от any, то динамически добавлять поля в неё нельзя. Когда создаётся экземпляр класса (оператор new), вызывается специальный метод с именем 'constructor'. Ты пытаешься в конструкторе записать в поле sommm. Компилятор TypeScript работает до рантайма и типы определяет исходя из объявления класса. В данном случае, тип AppComponent имеет 2 поля (title, hero). Так что с его точки зрения, у типа AppComponent нет поля sommm, потому-то он и ругается.
    Иногда, видимо из-за особенностей лайв-серверов, бывает, что хоть компилятор и ругается на несоответствие типов, но код запускается и работает, ведь с точки зрения JS, всё выглядит верно.

    UPD 1. Хоть я и привёл пример, где не указывал типы переменных, но так делать не стоит (почти) никогда. Чтобы оградить себя от написания такого кода, можно добавить опцию компилятора "noImplicitAny". Без неё следующий код скомпилируется без ошибок:
    let a;
    function foo(bar) {}
    class Bar {
      foo;
      private bar;
    }

    Со включённой опцией компилятор выдаст ошибки там, где переменные, аргументы функций и методов или поля классов объявлены без типов.
    Нужно всегда стараться указывать тип у переменных. Если один тип не подходит, можно попробовать сделать функцию/метод/класс дженериками. Если тип неизвестен - то можно поставить any. Но обычно такое бывает редко, ведь обычно ты знаешь, что за тип ожидается (у меня в проектах практически нет переменных с типом any).

    UPD 2. Я привёл пример, где в конструкторе указывается модификатор. Это специальный синтаксис в Typescript, который позволяет уменьшить количество повторяющегося кода.
    Однако, есть важный момент: внедрение зависимостей в компоненты/директивы/сервисы/и т.п. во втором ангуляре идёт через конструктор. Причём, в typescript-версии, фреймворк по-умолчанию извлекает информацию о типе аргумента конструктора и пытается внедрить по этому типу нужную зависимость. Поэтому в конструкторах должны быть только внедряемые зависимости.

    UPD 3. Если пишешь на ангуляре, то стоит изучить styleguide и стараться следовать ему. Плюс, хорошо ещё прикрутить к проекту tslint.
    Ответ написан
    4 комментария
  • Можно ли писать на TypeScript под NodeJS?

    @bromzh
    Drugs-driven development
    Можно ли писать на TypeScript под NodeJS? Вопрос о том, хорошая ли это практика?

    Да, да
    Смогу ли я использовать без особых проблем пакеты из npm, либо какие-то сторонние скрипты/классы написанные на js?

    Если разобраться, для чего нужны .d.ts-файлы и как использовать typings, то проблем не будет.

    Плюсы:
    - свежие фичи из спецификаций ES
    - статическая типизация, а, следовательно, все плюсы, которые она даёт. если в двух словах: часть ошибок будет отлавливаться ещё до запуска и, соответственно, нужно меньше тестов
    - хорошая поддержка языка всякими редакторами. IDE от Jetbrains лучше будут выдавать подсказки. И даже простые редакторы кода, например Atom, Sublime, VS Code начнут выдавать нормальные подсказки, переходить по определениям в коде, выдавать сигнатуру методов, и т.д.

    Минусы:
    - Нужно понять, как правильно подключать обычные js-библиотеки к проекту. В целом, это не сложно, но многие не осиливают.
    - Типы "существуют" только в compile-time. На выходе обычный JS со всей его динамической природой. Если код написан плохо (например, часто используется тип any), то typescript не поможет.

    А про отладку я уже говорил: с ней проблем нет. Просто нужно подключить вот эту штуку, и всё будет нормально. VS Code точно умеет подключаться к нодовскому (и хромовскому) дебагеру и будет прыгать по исходникам, а не по скомпилированной каше.
    Ответ написан
    Комментировать
  • Как поисковые системы относятся к Angular.js?

    @bromzh
    Drugs-driven development
    Первый ангуляр индексируется плохо. Нужно городить костыли.

    Второй ангуляр умеет выполняться на сервере, таким образом можно получить начальные данные и отдать на клиент уже предварительно отрендереный html с ними. Так что второй ангуляр индексируется нормально (если правильно готовить).
    Ответ написан
    Комментировать
  • Как вернуть значение из Promise у Javascript?

    @bromzh
    Drugs-driven development
    Никак. Промисы не делают код синхронным. Это просто более удобный способ организовать цепочку вызовов асинхронных функций. Получить и использовать значение можно только внутри колбеков (которые внутри then/catch).
    Ответ написан
    3 комментария
  • В одном nodejs модуле используется promise, но почему promise возвращает Promise { }?

    @bromzh
    Drugs-driven development
    Метод VK.call возвращает промис. Функция start возвращает результат выполнения VK.call.
    С чего вдруг он должен вернуть response?
    Ответ написан
    Комментировать
  • Как долго будут развивать и поддерживать Angular.js первой серии?

    @bromzh
    Drugs-driven development
    Пару лет подержат на плаву, но новые фичи появляться вряд ли будут. Используй вторую, она намного лучше.
    Ответ написан
    Комментировать
  • Как правильно связать два объекта в Mongoose (MongoDB)?

    @bromzh
    Drugs-driven development
    Что я делаю не так?

    Используешь монго там где не надо.
    Как правильно сохранять объекты со связями?

    Взять реляционную БД. В самом названии есть намёк, что такие БД хорошо подходят для хранения объектов со связями.

    Вот какой смысл брать монгу и пытаться построить архитектуру в стиле реляционных БД? Что мешает хранить story в поле документа юзера?
    Ответ написан
  • Как соединить Angular и Node.js( Express)?

    @bromzh
    Drugs-driven development
    вот работающий starter-kit: https://github.com/angular/universal-starter
    ну и ещё tsd мёртв, бери typings
    Ответ написан
    Комментировать
  • Какой стек выбрать для разработки обучающей веб-игры?

    @bromzh
    Drugs-driven development
    Java, Spark, Jackson, PostgreSQL (он теперь умеет в json- и jsonb-поля), Hibernate, Angular1.x+webpack+es6 или Angular2 + TS.
    Ответ написан
    Комментировать
  • Падает запуск Grunt из Jenkins. В чем может быть причина?

    @bromzh
    Drugs-driven development
    EACCES прямо-таки намекает, что прав не хватает для создания выходного файла.
    Ответ написан
    Комментировать
  • Как сохранить фото в MongoDB?

    @bromzh
    Drugs-driven development
    С монгой поставляется файловое хранилище (GridFS). Используй его. В поле же храни id файла, при загрузке записи подгружай отдельным запросом.
    Ответ написан
    Комментировать
  • Как сделать чуть более чем "простой" сервер на Node.js?

    @bromzh
    Drugs-driven development
    что нужно дописать в код, чтобы он смог отображать картинки из html документа

    https://www.npmjs.com/package/serve-static
    Ответ написан
    Комментировать
  • Как дождаться в NodeJS выполнения mongodb.forEach и подзапросов и вернуть результат?

    @bromzh
    Drugs-driven development
    promise

    UPD
    Отвечаю на коммент тут.

    В промисах (их есть несколько реализаций, но суть у всех одна) есть функция all, которая вернёт результат промисов всех переданных в неё промисов. Типа такого

    Так что можешь создать массив, на каждом шаге цикла оборачивать ответ в промис (если он сам не промис) и потом передать всё в метод all. Например, смотри в конец первого ответа

    Примерный код такой:
    var queue = [];
    cursor.forEach(function (element) {
        queue.push(Promise.resolve(element));
    });
    Promise.all(queue).then(function(arrayOfResults) {
        // тут делаешь что-то с массивом результатов.
    });
    Ответ написан
    3 комментария
  • Что лучше использовать async.js или promise?

    @bromzh
    Drugs-driven development
    Чисто промисы - это та же лапша, только в профиль. Ну только вложенность уменьшается. Генераторы и yield выглядят получше.

    Так же, где применим yield помимо асинхронного кода?
    Там, где нужны генераторы
    Ответ написан
  • Какими преимуществами обладает Go по сравнению с Java?

    @bromzh
    Drugs-driven development
    Есть ещё Scala + Akka - акторы, Vert.x - event-driven non-blocking фреймворк для JVM, поддерживает несколько языков.
    Ответ написан