В своём практическом повседневном программировании я практически полностью перешёл на платформу node.js. Возможно, она не лишена недостатков, и иногда заставляет бороться с замыканиями вместо разработки (да, я по-прежнему считаю что замыкания в javascript слишком перекручены) — но она крайне удобна для быстрого написания консольных приложений, и особенно работающих с вебом.Nodejs

Конечно, нужно чётко понимать её ограничения by design, и я не стану писать сложную математику или работу с диском, а тем более android-приложения в javascript — я скорее возьму для этого delphi. Однако для других целей нода — очень мощная платформа. Позволю себе укол в сторону delphi — несмотря на пропагандируемую неизвестными людьми направленность delphi на базы данных (кто они? кто им это сказал?) — в ноде я могу написать работу с БД несколько быстрее и с потерей меньшего количества нервов. Да, основная сфера деятельности Embarcadero — это БД, но они никогда не говорили о них как о каком-то выделенном направлении в Делфи.

Сама по себе nodejs, во-первых, не слишком удобна для быстрого написания, да и «из коробки» она практически ничего не может. Все необходимые функции добавляются модулями — впрочем, это стандартный подход ещё наверное со времён фортрана. Я веду цикл статей, посвящённых каждому модулю в отдельности — среди них есть как обязательные и общеупотребимые, так и довольно редко пригождающиеся. Вкратце опишу каждый модуль, чтобы вы могли сразу составить о нём представление, а полное описание — по ссылке.

Модули для node.js

Доведённый до абсолюта RAD-подход и ещё более полное отключение мозга, чем в обычном javascript — библиотека express.js. Обязательна для применения, без неё застрянете ещё на создании веб-сервера, когда ваш сосед будет уже писать следующий проект -либо будете обречены таскать за собой длинный незапоминаемый код создания веб-сервера в качестве шаблона. Я использую её практически во всех проектах, точнее даже так — если мой проект работает с вебом, значит он работает на express.js.

Работа с файлами — модуль fs. Файлы и файлы, что тут ещё скажешь. Работает быстро, качественно и незаметно, что ещё нужно от такого модуля.

request — незаменим, когда вам нужно что-то скачать из интернета. На самом деле, это крайне мощный модуль с механизмами потоков и конвейеров, умеет PUT и GET запросы и многое другое.

Мы же не в США, верно? У нас много разных кодировок. Для работы с ними — библиотека iconv-lite, знающая все нужные кодировки и умеющая преобразовывать их друг в друга. Не знаю, почему о ней редко пишут — ведь полезная функция.

Скачали request`ом веб-страницу, теперь хотим её разобрать. Для этого импользуем DOM-парсер cheerio — лёгкий, быстрый и удобный. У меня есть хороший пример его применения.

Очень важная библиотека, без которой ваш код всегда будет похож на спагетти, и вы не сможете сделать на node.js что-то сложнее блокнота (да и блокнот не сможете) — vow.js. Добавляет в node.js понятие потока и разнообразные методы работы с ними. Теперь управление любой асинхронностью — в ваших руках, а ваши волосы будут чистыми и шелковистыми.

Иногда (редко) возникает необходимость работы с портами. Допустим, какая-то программа передаёт весь свой вывод в некий порт, а вы хотите использовать эту информацию в Node.js. Для этого не обойтись без socket.io.

Крайне важная библиотека, которая понадобится в любом серьёзном проекте — mysql. Даёт интерфейс работы с MySQL-базами данных.

Если нужно делать что-то с картинками — ресайзить, обрезать, прочитать EXIF или даже порисовать на ней — пригодится модуль imagemagick. Существует ещё модуль graphicsmagic, который вроде бы даже быстрее работает — но я не смог заставить его работать.

Для выполнения заданий по расписанию — аналог линуксового крона, cron.js. Правда, плохо что процесс node.js висит в памяти всё это время.

Узкоспециализированный модуль для красивого форматирования блоков кода — highlight.js. Всё-таки  наверное удобнее подключать его к готовому html-файлу и исполнять на клиенте. Но для каких-то задач может пригодиться и серверный вариант.