• Что не так с Node.js?

    un1t:
    Sails - на самом деле просто шаблон приложения с предустановленным набором модулей и заданной структурой, а не полноценный фреймворк. И да, метеор это не Rails или Django. Express - да, это микрофреймворк. Но особенность (я не говорю, что это явное преимущество, а именно особенность) ноды в том, что в ней не делается все так, как в привычных фреймворках. Просто берутся только те модули (отвертки, если хочешь), которые в данном случае нужны, их "долгая" логика запихивается в какой-нибудь async.parallel или как middleware в express и затем просто обрабатывается результат. Подход применим для любого сложного случая. Если попробуешь сам, то убедишься в этом. На самом деле очень сложно передать это текстом, нужно просто попробовать.

    Я согласен, что не во всех проектах нужен асинхронный подход. Но то же верно и для любого другого подхода/шаблона. Это вообще очень философский вопрос - что и для чего больше подходит) Но асинхронная обработка, однозначно, хорошо вписывается в приложения, где есть много работы с данными, коими является большая часть интернета. И синхронный код не "проще и надежнее", а просто "привычнее".

    Про прослойку я согласен, это как-то странно, но о такой форме извращения я не упоминаю)
  • Что не так с Node.js?

    Никаких костылей в языке нет, а возможности семимильными шагами догоняют (если еще не догнали) аналоги. Библиотеки есть практически на все случаи жизни, иногда нужно потратить время на поиски оптимального для данного случая модуля, но тем не менее.

    Фреймворки есть. Sails, Meteor как минимум. Хотя на мой взгляд гораздо удобнее использовать express и только необходимые модули и обработчики запросов во всех случаях.

    Естественно, коллбэк-макароны выглядят плохо, было бы глупо это отрицать. Но, во-первых, это цена, которую вы платите за возможность поделать что-то полезное, пока выполняется запрос к БД, а, во-вторых, "всякие async и promise" разрешают ситуацию достаточно изящно, чтобы асинхронный код хорошо писался и читался. Я говорю как человек, пересевший с PHP и Rails на Node.js. К этому просто нужно привыкнуть, как и ко всему новому.
  • Как реализовать наследование DOM объекта в jQuery?

    Klaus Kater: Не уверен, понял ли правильно проблему. Я понял так: есть какой-то набор данных, имеющих структуру дерева, и есть набор DOM-элементов, каждый из которых может иметь функционал взаимодействия с ним, которое влечет за собой изменение данных. Если так, то что мешает использовать данные напрямую, без помещения их в объект DOM? DOM - это интерфейс работы с данными, и он не должен представлять собой сами эти данные. Единственное, в чем тут есть загвоздка - это отображение актуальных данных в DOM-элементах, но тут поможет создание такого объекта работы с данными, который бы позволял подписываться на изменение данных и, соответственно, вызывал функции обновления этих данных в подписанных объектах. Короче говоря, это two-way-binding в angular и подобных фреймворках. Способ с отрисовкой дерева - да, довольно странное решение для браузера)
  • Как реализовать наследование DOM объекта в jQuery?

    Klaus Kater: Они вызываются из самого объекта? То есть что-то типа el = Sub(); el.someFunction()? Если надо так, то тогда пихаешь свой DOM элемент как объект в this, свои функции объекта в Base.prototype, а статические функции (если такие есть) в Base. Ну и вызываешь при наследовании Base.apply(this, arguments) и изменяешь дальше свой объект. Короче, обычное наследование. Типа того

    function Base() {
    	this.el = $('<div></div>');
    	// ...
    }
    
    Base.someStaticMethod = function() { /* ... */ };
    
    Base.prototype.someMethod = function() { /* .. */ };
    Base.prototype.constructor = Base;
    
    function Sub() {
    	Base.apply(this, arguments);
    	this.el.append('I am subclass object');
    	// ...
    }
    Sub.prototype = new Base();
    Sub.prototype.constructor = Sub;
    
    Sub.prototype.someOtherMethod = function() { /* ... */ }
    
    var el = new Sub();
    el.someMethod();
    el.someOtherMethod();
  • Как реализовать наследование DOM объекта в jQuery?

    Klaus Kater: А что ты имеешь в виду под дополнительными функциями?
  • Как в блоке с отступами по ширине разместить блок, шириной на весь экран?

    Вадим Егоров: очевидно, на оба класса. Мало то, можно просто любому элементу, в т.ч. и картинке, задавать один и тот же класс. Только тогда надо добавить к классу display: block.
  • Почему Stylus непопулярен?

    Stylus тащит! К тому же у него можно использовать css синтаксис, хоть это и не освобождает от необходимости ставить правильные отступы. Хотя я бы сделал синтаксис stylus построже или хотя бы дал возможность выбирать как в scss или sass.
  • Какую логику сохранения сессии пользователя применить в приложении?

    В ноде с express аналогично, только вместо listener там будет middleware
  • Какой выбрать язык для серверной части highload проекта?

    index0h:
    Не знаю, я лично memcached так не использовал, но модуль для этих целей в nginx есть. Наверняка его можно использовать вместе с нодой.

    Авторестарт (лично на мой взгляд, я не призываю к спору) нужен на продакшене, чтобы приложение тупо не упало, пока спит программист, например. А сами исключения в любом случае попадают в логи и незамеченными не останутся. При разработке, ясное дело, это штука не нужна.

    Возможности nginx. Разве нет? Можете сказать, что не работает?

    Сокеты и порты. А как связать, скажем, 80 порт с нужным сокетом нужного приложения ноды по домену?

    Так passenger разве отнимает возможность взаимодействия с окружением, в котором запускается приложение? Почему в абстрактном вакууме? Приложение работает точно так же, за исключением того, что нет необходимости переписывать код для работы в разных окружениях и конфигурация сервера приложения интегрирована в web-сервер.

    Погуглите puppet, chef, salt, vagrant, docker


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

    index0h: в принципе наверняка многое из того, что есть в passenger, можно реализовать в cluster. А так из того, на что я обратил внимание и что вспомнил (в случае с nginx, с Apache все аналогично в большинстве моментов):
    - в passenger все уже реализовано и приложение избавлено от лишнего кода, по сути не относящегося к логике самого приложения;
    - настройка в конфигурационном файле nginx (файл логов консоли приложения, использование процессов или потоков, их количество, переменные окружения, балансировка нагрузок и т.д. и т.п.) для каждого приложения отдельно;
    - авторестарт сервера при ошибках;
    - все возможности nginx (привязка к домену, статика, gzip, rewrite и т.д. и т.п.)
    - быстрое взаимодействие nginx с самим приложением за счет использования сокетов вместо портов (сам не знаю, что это, но написано, что так гораздо быстрее :) );
    - приложения на ноде не занимают отдельный порт.
  • Какой выбрать язык для серверной части highload проекта?

    Есть сервер phusion passenger (возможно, не он один), который запускает одно и то же приложение на ноде в нескольких процессах (можно настроить, чтобы использовались потоки). Грубо говоря, запускаем по процессу на ядро, и считай, что у тебя как будто бы действительно асинхронный JavaScript. Правда, нужно при разработке это учитывать и для данных, которые должны запоминаться между запросами, использовать БД типа redis (при использовании потоков необязательно).
  • Какой выбрать язык для серверной части highload проекта?

    В node.js есть async для организации асинхронного кода. И вообще с асинхронностью не надо мучатся, надо просто к ней привыкнуть. Сам юзаю ноду после пыхи и руби. Поначалу, действительно, мозг взрывался, но теперь асинхронный код для меня стал вполне нормальным.

    Не холивара ради, просто личные наблюдения)
  • Как в nodejs возвращать ответ на AJAX запрос?

    Stopy: ошибка сервера, очевидно, будет расписана в консоли приложения (в командной строке, откуда ты приложение запускал). Скорее всего ошибка в шаблоне.
  • Как в nodejs возвращать ответ на AJAX запрос?

    Stopy: ааа, я не понял вопроса, думал, что ты хочешь мне зачем-то отрендеренный шаблон отправить)
    Конечно - берешь любой шаблонизатор, читаешь доки, как его юзать и используешь. Конкретно могу Jade посоветовать - я его использую.
  • Как в nodejs возвращать ответ на AJAX запрос?

    Stopy: бывают затупы) только странно, что вообще что-то в консоль попало, кроме ошибки интерпретатора)
  • Как в nodejs возвращать ответ на AJAX запрос?

    Stopy: я понял) тебя не смущает, что в клиентском коде функция-коллбэк для приема ответа от сервера идет через запятую внутри объекта, хотя должна быть как 3-й параметр? Надо как-то так:
    $.post('/get_comments', { id: parseInt($(this).parent().data('id')) }, function(data) { console.log(data); });
  • Где правильнее проверять пользовательские данные? В контроллере или модели?

    Иван: наверное, имеется в виду, что у сегмента пути можно тип указать, не более. А че, тоже ведь валидация)
  • Как в sailsjs выполнить запрос с параметром "$gte"?

    Максим Антонихин: в плане к какому-то внешнему ресурсу или нужен просто роутинг? Если к внешнему ресурсу, то нагугли какой-нибудь npm модуль для этих целей, роутинг же настраивается в config/routes.js.