• Как выполнить функцию после ajax-запроса типа post?

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js
    UPD: поможет флаг в cookie или localstorage, например: localStorage.lastResult = "error";

    Рядом с complete в вызове $.ajax добавьте еще error: function() {} или error: functionName если она уже где-то была определена.
    Ответ написан
    3 комментария
  • Как починить: Error: EPERM, lstat 'e:\System Volume Information' at Error (native)?

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js
    По той ссылке, что Вы дали и лежит решение, т.к. на венике могут встречаться файлы и каталоги с разными правами доступа, то нужно выделять из общего потока ошибок EPERM и игнорировать их. Полное игнорирование ошибок: finder.on('error', function (err) {}); Если глушить только EPERM то наверно так:
    finder.on('error', function (err) {
        if (err.code !== 'EPERM') finder.stop();
    });
    Ответ написан
    3 комментария
  • Javascript backend frameworks or vanilla js?

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js
    Посмотрите вот этот мой развернутый ответ: Подсоветуйте фреймворк для node?
    Инструментов можно набрать тут: nodeframework.com и тут https://github.com/sindresorhus/awesome-nodejs и тут https://github.com/vndmtrx/awesome-nodejs

    По БД рекомендую MongoDB, если у Вас данные аморфные, сложной или часто изменяющейся структуры с этими драйверами: https://www.npmjs.com/package/mongodb А если данные имеют редко меняющующуюся структуру и хорошо ложатся в таблицы, то берите реляционку, лучше PostgreSQL, с драйверами: https://www.npmjs.com/package/pg Но я не люблю и не рекомендую ORM, обычно от них больше проблем, тормозов и дополнительной работы больше, чем выгоды от их внедрения. Если уж приспичит, то для монги есть mongoose: mongoosejs.com это ODM, аналог ORM для документных баз, а для PG есть много вариантов, которые основаны на том же драйвере pg.

    Паттерн MVC он вообще изначально был изобретен для графических интерфейсов пользователя, и там он еще как-то себя оправдывает, да и то кривенько, почитайте эти мои статьи: habrahabr.ru/post/204958 и habrahabr.ru/post/117791 Для ноды это вообще противоестественно. GUI и бекенд должны быть разделены сетевым API, на которое вешаются что мобильные приложения, что браузерные, что оконные, это уже без разницы.
    Ответ написан
    Комментировать
  • Как определить, что на конкретной странице находится какой-то залогиненый пользователь?

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js
    Нужно определить, что пользователь не просто зашел, а сидит на этой странице, не закрыл ее и не выключил комп. Для этого нужно открыть websocket на сервер и периодически (5-10 секунд) по нему присылать кусочек данных (heartbeat). А на сервере нужно держать таблицу соответствий, кто "держит" какую страницу. Берите библиотеку https://www.npmjs.com/package/websocket и реализовывайте.
    Ответ написан
    Комментировать
  • Какие плюсы и минусы двух комбинаций технологий разработки?

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js
    Ради Аллаха, выбросите Вы все эту ерунду, возьмите React для клиента + один из фреймворков для создания серверного API на ноде. Шаблонизировать на сервере это очень специфическая задача, нужная разве что для публикации контента. А приложения лучше писать как SPA (одностраничное приложение, т.е. клиент грузится в браузер и все дальнейшие обмены данными JSON формате через API).
    Ответ написан
    6 комментариев
  • Почему при попытке подключиться к mysql под node.js приложение уходит в ошибку?

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js
    Скорее всего поможет первый вариант:
    1. Перенесите connection.connect(); в сразу после определения var connection
    2. Попробуйте заменить 127.0.0.1 на localhost
    3. Проверьте порт 3306, его можно явно задать в createConnection
    Ответ написан
    Комментировать
  • В каких случаях лучше использовать Apache, а в каких Express?

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js
    Сравнение не совсем корректное. Если Вы пишете серверную сторону на JavaScript под Node.js, то используете встроенный http сервер (express это надстройка над встроенным сервером, мало имеющая отнощения к веб-серверу вообще), а если пишете на PHP или другом языке, работающим через CGI с Apache, то используете Apache.
    Ответ написан
    3 комментария
  • Как лучше сделать чат?

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js
    Я не вижу ни малейшего смысла в socket.io, если уровень поддержки websocket в браузерах цже давно достаточный: caniuse.com/#feat=websockets и API вебсокетов вполне простое и понятное. А для ноды берите серверную библиотеку https://www.npmjs.com/package/websocket
    Ответ написан
    Комментировать
  • В каком случаи использовать --save и --save-dev в NPM?

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js
    Если Вы хотите, чтобы npm модифицировал зависимости в package.json, а зависимости, как известно, делятся на основные (dependencies) и для разработки (devDependencies). Зависимости для разработки ставятся через npm install packageName --dev, и это используется для автоматизированного тестирования, сборок и т.д.
    Ответ написан
    1 комментарий
  • Что учить: сразу NodeJS на Azure или NodeJS отдельно?

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js
    Развертывание - дело десятое, осваивайте JavaScript, если с этим все в порядке, то посмотрите видеоуроки и беритесь за Node.js API, а потом пройдите лабораторки на nodeschool. Параллельно нужно собрать все свои знания в стек технологий, на одной ноде Вы напишете только сервер, а на клиенте что? Нынче времена такие, что одного jQuery уже не хватит, посмотрите React, вот тут серия статей: habrahabr.ru/post/229655 и подберите СУБД для своих нужд, например, рекомендую MongoDB, если у Вас данные аморфные, сложной или часто изменяющейся структуры. Рекомендую PostgreSQL, если данные имеют четкую, редко меняющуюся структуру и хорошо ложатся в таблицы. Все это прекрасно ставится на локальной машине, но если у Вас виндовс, то рекомендую завести виртуалку с CentOS или другим линуксом.
    Ответ написан
    Комментировать
  • Как организовать соединение множество игр с их БД?

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js
    Когда Вы делаете MongoClient.connect с использованием драйвера mongodb то создается пул соединенний с базой, они открываются и закрываются по мере необходимости, так что, не волнуйтесь и используйте одно соединение с БД для всех запросов к БД. И если у Вас платформа для игр, то храните все в одной БД, потом будет проще бекапить и восстанавливать, а если хорошо подумать, то и какая-то обобщенная структура со временем наметится.
    Ответ написан
    Комментировать
  • Какой алгоритм работы модуля по логированию изменений файла?

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js
    А стрим тут и не нужен, делайте fs.readFile, потом ставьте fs.watch и при изменении fs.readFile в другую переменную и сравнивайте, только нужно создать еще очередь сравниваний, потому, что файл может меняться чаще, чем закончится предыдущее сравнивание (но это чисто теоретически, если по специфике задачи известно, что он меняется с малой периодичностью, то это можно и опустить). Результат fs.readFile это объект Buffer, для сравнения двух буферов, скорее всего, если они содержат текст их можно перегнать в строки .toString() и парсить. А вот понять, идентичны ли буферы, можно при помощи Buffer.compare(buf1, buf2).
    Ответ написан
    3 комментария
  • Как добавить в корзину интернет - магазина разные сущности?

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js
    Тут три варианта, или делайте subtype discriminator или документные (бессхемные) БД (например MongoDB), или во многих реляционных СУБД (например, PostgreSQL) уже доделали колонки типа JSON (куда можно писать все поля, которые отличаются у разных типов Item-ов, писать туда сериализованный объект, по сути).
    Ответ написан
  • Node js вызов асинхронной функции в цикле. Как дождаться данных?

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js
    Или добавляете счетчик и в каждом колбеке (в который приходят данные) его добавляете и проверяете, не последний ли это фрагмент данных. Или используете библиотеку async: https://github.com/caolan/async а именно async.each или async.parallel.
    Ответ написан
    Комментировать
  • Где разместить nodejs сервер?

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js
    Я отдаю предпочтение физическим серверам, это неизмеримо удобнее, чем неуправляемые хостинги типа хероку и нодеджицу, и значительно лучше, чем виртуалки, которые теряют производительность и лейтенси на слое виртуализации. Если нужно добиться действительно хорошего latency (отклик или отзывчивость) то другого решения нет, но прошу не путать это с производительностью т.е. rps (request per second) на виртуалках можно даже дешевле поднять, а вот отзывчивость системы на железе выше. Но это не всегда так критично. Кроме того, советую сделать таблицу и рассчитать стоимость одного ядра или даже 1Ghz для всех вариантов. Из-за ограничений ноды в памяти одного процесса, имеет смысл делать расчеты исходя из пропорции 2гб на 1cpu.
    Я использую вот что:
    1. Для маленьких проектов ($5 в месяц это очень хорошо) https://www.digitalocean.com/
    2. Для проектов среднего уровня (кое-кто на них ругается, но у меня лично никогда проблем не было с ними) https://www.hetzner.de/
    3. Для крупных проектов (есть замечательные 40-ядерные сервера MG-256) www.ovh.ie
    Ответ написан
    Комментировать
  • Что можно написать на Node.js?

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js

    Часто применяется для:

    1. Локальные приложения и утилиты командной строки
    • Сборщики и трансляторы
    • Пакетная обработка и сценарии отложенной обработки
    • Скрипты, CLI (интерфейсы командной строки)
    • Генерация документации, отложенное формирование отчетов
    • Сценарии тестирования для других систем

    2. Серверы
    • Серверы веб-приложений и SPA
    • Серверы и API для мобильных приложений
    • Любые другие веб-API (RPC, JSON, REST)
    • Серверы сообщений и трансляция событий (чаты, игры, интерактив)
    • Заплаты на уже готовые системы, написанные на других языках, для реализации вебсокетов, SSE, лонг-пулинга и т.д., т.е. для затыкания дыр, для решения проблем в узких местах уже работающих систем.

    3. Клиенты
    • Оконные приложения (nw.js, node-webkit)
    • Кравлеры, парсеры и сбор данных

    4. Железо
    • Программирование микроконтроллеров (arduino, espruino, tessel)
    • Промышленная автоматизация

    Редко применяется (но подходит) для:
    • CMS, публикация контента (просто ниша уже занята и в этой задаче нода не дает чего-то принципиально нового или сверх соблазнительного).
    • Массовая электронная коммерция и торговля (не применяется для массовых движков магазинов, но используется отдельными крупными компаниями для торговых и платежных задач в качестве дополнительного средства к уже имеющемуся ПО, по сути закрывает узкие места).

    И плохо подходит:
    • Вычисления и моделирование, со скоростью математических операций нода и JS, как не типизированный язык, не дают хороших показателей
    • Научные приложения (по тем же причинам)
    Ответ написан
    10 комментариев
  • Как развернуться на Azure на нескольких виртуальных машинах с общим файлов хранилищем?

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js
    Азур - это право очень странный выбор для ноды, почему бы не Digital Ocean, OVH или Hetzner? Берегитесь майкрософта, сначала Вы подсядите на один их сервис для хранения файлов, потом на смежный, потом еще один и так постепенно приложение растворится в азуре и перенос еще куда-то будет не возможен. Я не рекомендую использовать их как хостинг, а если это уже решено, то хранение файлов оставьте как оно и было сделано, просто в файловой системе, так можно будет потом проще передвинуться куда захотите, между компами настройте NFS.
    Ответ написан
    1 комментарий
  • Socket.io: Как сделать чтобы происходило выполнение события на всех подключенных компьютерах кроме моего?

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js
    Я не использую socket.io, но если уж пригласили отвечать, то попробуйте socket.broadcast.emit('eventName', data);
    Ответ написан
    1 комментарий
  • Как получить данные из dll на линуксе?

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js
    Можно парсить двоичный формат PE (Portable Executable) он хорошо специфицирован и все DLL в этом формате. Для этого будут полезен класс Buffer https://nodejs.org/api/buffer.html и тут есть статья blog.paracode.com/2013/04/24/parsing-binary-data-w... и еще библиотека https://www.npmjs.com/package/binary-parser для упрощения жизни. Еще есть вариант искать парсер PE для линукса и запускать его из ноды через командную строку и потом парсить его вывод в консоль, это может быть проще, но добавляет зависимости. Я бы парсил сам.
    Ответ написан
  • Микросервисная архитектура в nodejs?

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js
    Я бы не противопоставлял монолитные приложения и микросервисы. На самом деле чем лучше приложение разделено на части, тем лучше оно централизовано. Приведу сначала пример житейский, если каждый сотрудник автономно выполняет порученную ему работу хорошо и качественно, то сокращается взаимодействие между сотрудниками, уменьшаются расходы времени на контроль и переделывание работы, при этом монолитность иерархических структур упрочняется чем более автономен каждый сотрудник в организации. Что же противопоставить, что же плохо? Плохо - смешивать уровни абстракции, в ноде распространено смешивать все в кучу, я приводил пример тут: habrahabr.ru/post/247543 цитирую:
    Прикладной код часто смешан с системным. Дело в том, что нода, и большинство производных фреймворков, слишком низкоуровневые и каждое приложение обязательно содержит часть системного кода, не относящегося к задачам предметной области. Вот и случается, например, что добавление HTTP заголовка становится методом класса Patient и находится в одном файле с заданием роутинга URLов к сему пациенту и с отправкой событий через веб-сокеты. Это чудовищно.

    Монолит - это не плохо. Плохо, когда смешаны слои абстракции, если это не понимать, то микросервисы ничего не дадут. Это приводит к высокой связанности кода, когда каждый фрагмент зависит от множества других. Внутри каждого микросервиса можно сделать полное месиво абстракций. Лучше планировать архитектуру слоями, ниже - слои системные, выше - прикладные. Иногда их нужно 2, иногда 3, иногда больше. В каждом модуле, конечно у вас будут как минимум: внешний интерфейс (содержащий внешние вызовы и спецификации форматов данных для обмена), внутренняя логика и внутренние структуры данных. Задача архитектора сделать так, чтобы интерфейс модуля экранировал внутренние структуры данных и внутреннюю логику от зависимостей. При этом, делить приложение на сотни процессов не обязательно, даже внутри одного процесса вы можете связать компоненты по принципу микросервисов, посадив их на шину событий, это будет называться модель акторов.
    Ответ написан
    2 комментария