Является ли NodeJS хорошей каркасной/кодовой базой для большого серверного приложения?
Этот вопрос немного субъективен, но я включаю в себя фактические объективные моменты, которые решают реальные проблемы при работе с узлом в большом проекте.
Update после работы над проектом на некоторое время:
Лучше всего в качестве внешнего сервера конца/API, который ввод-вывод связанных/(самого переднего конца/API-сервера). Если у вас есть потребности в вычислительной базе (обработка и т. Д.), То она может быть сопряжена с другими технологиями (ядро ядра C#, go, Java и т. Д.)
Я создал этот проект в качестве примера, иллюстрирующего большинство точек - Сане Узел развития: https://github.com/bryanmacfarlane/sanenode
NodeJS не построен на вершине своего собственного сервера HTTP. Он построен поверх процессора javascript V8 chrome и не предполагает HTTP-сервера. Существует встроенный модуль http, а также популярный express web server, но есть также модули сокетов (а также socket.io). Это не просто сервер http.
Единственная нить не вызывает узкое место, потому что все операции ввода-вывода являются асинхронными. Эта ссылка хорошо объясняет это: http://blog.mixu.net/2011/02/01/understanding-the-node-js-event-loop/
Что касается программного модуля, вы можете выполнить поиск по адресу npm registry. Всегда смотрите на то, как многие другие люди используют его (загружает) и посещают репозиторий github, чтобы узнать, активно ли он поддерживается (или есть куча вопросов, которые никогда не привлекают внимания).
Что касается «большого проекта», что я нашел решающее значение для здравомыслящего развития:
Compile поддержка времени (и IntelliSense): Найти проблемы при компиляции. Если вы не думаете, что вам нужно это, как я, когда я начал, вы передумаете после этого первого большого рефактора.
Устранение обратного звонка Ад: Сохранение производительности, которая имеет решающее значение (отмечено выше), но исключает код обратного вызова. Используйте async/wait, чтобы написать линейный код и сохранить async perf. Интеграция с обещаниями, но гораздо лучше, чем использование обещаний.
Инструментальное: Много вариантов, но я нашел лучшую Машинопись (ES6/7 сегодня), VS Code (IntelliSense), Мокко (модульное тестирование).
Instrumentation/Logging: Очень важно знать о своем приложении с помощью трассировки и инструментария.
Построить на хорошо проверенных фреймворках: Я использую экспресс в качестве примера, но это предпочтение, и есть другие.
После работы над реальными проектами на некоторое время, я обновил свой ответ с последними результатами. – bryanmac