Це сервер, так.
Веб-програма node.js - це повноцінний веб-сервер, подібно до Nginx або Apache.
Ви дійсно можете обслуговувати свою програму node.js, не використовуючи будь-який інший веб-сервер. Просто змініть свій код на:
app = express();
http.createServer(app).listen(80);
Дійсно, деякі проекти використовують node.js як інтерфейсний балансир навантаження для інших серверів (включаючи Apache).
Зверніть увагу, що node.js - це не єдиний стек розробки, який робить це. Структури веб-розробки в Go, Java та Swift також роблять це.
Чому?
На початку була CGI. CGI чудово працював і працював нормально. Apache отримає запит, виявить, що URL-адреса повинна виконати програму CGI, виконати цю програму CGI і передати дані як змінні середовища, прочитати stdout і подати дані назад у браузер.
Проблема в тому, що це повільно. Це нормально, коли додаток CGI являв собою невелику статично скомпільовану програму С, але групу невеликих статично скомпільованих програм С було важко підтримувати. Тож люди почали писати мовами сценаріїв. Потім це стало важко підтримувати, і люди почали розробляти об'єктно-орієнтовані фреймворки MVC. Тепер у нас виникли проблеми - КОЖНИЙ ЗАПИТ повинен компілювати всі ці класи і створювати всі ці об’єкти лише для того, щоб обслуговувати якийсь HTML, навіть якщо немає нічого динамічного для обслуговування (оскільки фреймворк повинен з’ясувати, що немає нічого динамічного для обслуговування).
Що робити, якщо нам не потрібно створювати всі ці об’єкти під кожен запит?
Так думали люди. І від спроби вирішити цю проблему виникла кілька стратегій. Одним із перших було вбудовування перекладачів безпосередньо у веб-сервери, як mod_php
в Apache. Складені класи та об'єкти можуть зберігатися в глобальних змінних і, отже, кешуватися. Іншою стратегією було зробити попередню компіляцію. І ще однією стратегією було запуск програми як звичайного серверного процесу та спілкування з веб-сервером за допомогою спеціального протоколу, такого як FastCGI.
Потім деякі розробники почали просто використовувати HTTP як протокол свого додатка-> сервера. По суті, програма також є сервером HTTP. Перевага цього полягає в тому, що вам не потрібно впроваджувати будь-який новий, можливо, помилковий, можливо не перевірений протокол, і ви можете налагоджувати свою програму безпосередньо за допомогою веб-браузера (або також часто, curl
). Вам не потрібен модифікований веб-сервер для підтримки вашого додатка, будь-який веб-сервер, який може робити зворотне проксі-сервер або переспрямування.
Навіщо використовувати Apache / Nginx?
Коли ви обслуговуєте програму node.js, зверніть увагу, що ви є автором власного веб-сервера. Будь-яка потенційна помилка у вашому додатку є безпосередньо придатною для використання в Інтернеті. Деяким людям (виправдано) це неприємно.
Додавання шару Apache або Nginx перед вашим додатком node.js означає, що ви маєте перевірену в боях частину програмного забезпечення в реальному Інтернеті як інтерфейс для вашого додатка. Це додає крихітну затримку (зворотне проксі-сервер), але більшість вважають, що це того варте.
Це було стандартною порадою в перші дні node.js. Але в наші дні існують також веб-сайти та веб-сервіси, які виставляють node.js безпосередньо до Інтернету. http.Server
Модуль тепер досить добре бойові випробування в Інтернеті можна довіряти.
Isn't it true that a Node.js based server (i.e. code) will still be placed within something like Nginx to run?
Ні, це неправильно