«phpClub» — архив тем ("тредов"), посвящённых изучению PHP и веб-технологий.
Аноним 2019/06/20 11:42:20  №1419407 1
Аноны, есть тут кто то кто на Node.js пишет? Я увлекся немного.
Хочу что то аналогичное моему php-фреймворку запилить - то есть роутер парсит url, и вызывает соответствующие контроллеры и экшены.
В сети все туторы на express, там это все несколько иначе. Впрочем обработчик запроса в express поддерживает регулярки. Но в JS нет аналога preg_match. В JS нет автозагрузки классов хотя может она не нужна? Ведь класс загружается однажды, и висит в памяти, так?
Сейчас хочу что то типа MVC фреймворка на ноде сделать. Что бы подгружались классы и вызывались экшены.
Не в JS тред пишу по очевидным причинам - они там учатся css динамически менять.

А так, глубже копнув ноду - всеже как же удобен пхп для своих задач. В ноде что бы данные из post вытащить - нужно поебаться.

Ответы: >>1419443 >>1419588
Аноним 2019/06/20 18:24:45  №1419588 2
>>1419407
> Но в JS нет аналога preg_match
Есть. Либо /regex/.test(string) либо string.match(/regex/)

> В JS нет автозагрузки классов
В JS нет, в ноде есть модули, которые можно экспортировать и импортировать, а в новой ноде с флагом experimental-modules можно использовать ES6 модули: https://nodejs.org/api/esm.html#esm_code_import_code_statements

Не понимаю, что ты там велосипедить собрался. Поддерживаю чужой проект на ноде третий месяц после нескольких лет Symfony/Doctrine, ощущения как будто пересадили с болида Формулы 1 на одноколёсный велосипед:
- Sequelize вместо нормальной ORM: нет автоматической генерации миграций, на foreign key предыдущие разрабы положили болт, потому что самим лень проставлять, а Sequelize не умеет их добавлять автоматически (Doctrine умеет)
- Нет способа быстро получить CRUD API, для Symfony есть API Platform, который ставится одной командой и позволяет несколькими аннотациями описать CRUD API для сущностей со всеми типами связей, фильтры, пагинацию, поиск по частичному совпадению
- Всё на JS (не TypeScript), автокомплит и go to definition в половине случаев не работают, куча нигде не описанных структур разного уровня вложенности (даже в PHP сейчас принято заворачивать такое в объекты с геттерами, чтобы хоть где-то в коде были описаны такие структуры)
- Про DI контейнер никто не слышал, поэтому норма когда в каждом консольном скрипте копипаста на 100 строк из ручной конфигурации. По этой же причине везде static методы, люди просто не знали как по-другому

Итого: Если нужно, чтобы проект не утонул под тяжестью багов и велосипедов спустя пару лет - нужно брать фреймворки, которые диктуют архитектуру и в которых многие проблемы уже решены, чтобы программисты проявляли меньше творчества. Если бы проект изначально писали мы, то взяли бы PHP и Symfony.
Ответы: >>1419622 >>1419816
Аноним 2019/06/20 19:37:52  №1419622 3
Аноним 2019/06/21 08:10:20  №1419816 4
>>1419588
>>Не понимаю, что ты там велосипедить собрался.
Да я в принципе согласен с тобой. ПХП удобнее. Ноду заюзал что бы просто с иного ракурса взглянуть на разработку в вэб.
Сейчас вот задумался - как реализовать свою цепочку мидлвэйров в пхп, в моем фреймворке. Понятно что не ради продакшена, а ради тупо интереса.

Еще мне импонирует что нода - это отдельное приложение, которое существует в памяти, а пхп это просто последовательность скриптов. Но я не могу из этого факта сделать какие либо отрицательные или положительные выводы, потому что нуб.

Скажи, у тебя есть примеры простого приложения на ноде с MVC паттерном? Потому что пока что в express все похоже на сильно модифицированное if..else, пусть и с вызовом контроллера.

Ответы: >>1420204
Аноним 2019/06/21 18:59:43  №1420204 5
>>1419816
> Еще мне импонирует что нода - это отдельное приложение, которое существует в памяти, а пхп это просто последовательность скриптов.

Одной ноды для реального приложения недостаточно. Обычно запросы принимает какой-нибудь веб-сервер вроде nginx и проксирует на ноду. Через nginx настраивается HTTPs, отдача статики, сжатие, кеширование. Я ещё настраивал ограничения для разных стран по IP на основе GeoIP. Сама нода запускается через какой-нибудь process manager вроде PM2, чтобы контролировать количество запущенных процессов, перезапускать приложение если какие-то процессы отъедают много памяти. При локальной разработке PM2 удобно использовать для автоматического перезапуска приложения после изменений в файлах. Не будешь же ты после каждого изменения в коде перезапускать сервер? В PHP всё это не нужно, из-за его stateless модели.
В итоге связка Node + Nginx + PM2 не особо удобнее PHP + Nginx + PHP-FPM. В PHP тоже есть встроенный веб-сервер для разработки: https://www.php.net/manual/en/features.commandline.webserver.php

> примеры простого приложения на ноде с MVC паттерном
Будет тоже самое, что и на PHP: https://github.com/codedokode/pasta/blob/master/arch/mvc.md#пример-mvc-приложения