C'est un serveur, oui.
Un node.js une application web est un véritable serveur web juste comme Nginx ou Apache.
En effet, vous pouvez servir votre node.js application sans l'aide de tout autre serveur web. Il suffit de changer votre code:
app = express();
http.createServer(app).listen(80); // serve HTTP directly
En effet, certains projets utilisent des node.js comme le front-end d'équilibrage de la charge pour les autres serveurs (y compris Apache).
Notez que node.js n'est pas la seule pile de développement pour ce faire. Web de développement des cadres à l'Aller, Java et Swift aussi le faire.
Pourquoi?
Au commencement était le CGI. CGI a été beaux et travaillé sur OK. Apache voudrais obtenir une demande, de trouver que l'url doit exécuter une application CGI, l'exécution de cette application CGI et de transmettre des données comme des variables d'environnement, lire le stdout et de servir les données vers le navigateur.
Le problème est qu'il est lent. C'est OK lorsque le CGI app est un petit programme C compilé statiquement, mais un groupe de petites compilé statiquement les programmes en C est devenu difficile à maintenir. Donc, les gens ont commencé à écrire dans les langages de script. Alors, qui est devenu difficile à maintenir et les gens ont commencé en développement orienté objet, MVC, frameworks. Maintenant, nous avons commencé à avoir de la difficulté à CHAQUE DEMANDE doit compiler toutes ces classes et de créer tous ces objets juste pour servir le code HTML, même si il n'y a rien de dynamique pour servir (parce que le cadre doit comprendre qu'il n'y a rien de dynamique de servir).
Et si nous n'avons pas besoin de créer tous ces objets à chaque demande?
C'était ce que les gens pensaient. Et d'essayer de résoudre ce problème est venu plusieurs stratégies. L'un des premiers a été d'incorporer les interprètes directement dans les serveurs web, comme mod_php
de Apache. Compilé les classes et les objets peuvent être stockées dans des variables globales et par conséquent mis en cache. Une autre stratégie a été de faire de pré-compilation. Et pourtant, une autre stratégie a été de lancer l'application régulière d'un processus de serveur et de parler avec le serveur web à l'aide d'un protocole personnalisé comme FastCGI.
Ensuite, certains développeurs ont commencé tout simplement à l'aide de HTTP comme leur app->serveur de protocole. En effet, l'application est également un serveur HTTP. L'avantage, c'est que vous n'avez pas besoin de mettre en œuvre de nouvelles, éventuellement, buggy, peut-être pas testé le protocole et vous pouvez déboguer votre application directement à l'aide d'un navigateur web (ou aussi souvent, curl
). Et vous n'avez pas besoin d'une modification de serveur web à l'appui de votre application, il suffit de n'importe quel serveur web qui peuvent faire des proxy inverse ou les redirections.
Pourquoi utiliser Apache/Nginx?
Lorsque vous servez d'un node.js application note que vous êtes l'auteur de votre propre serveur web. Tout bug potentiel de votre application est directement exploitable bug sur l'internet. Certaines personnes sont (à juste titre) de ne pas à l'aise avec cela.
L'ajout d'une couche d'Apache ou Nginx en face de votre node.js app signifie que vous avez une bataille testés, à la sécurité trempé un morceau de logiciel sur le live internet comme interface de votre application. Il ajoute un petit peu de latence (le proxy inverse), mais la plupart considèrent qu'il vaut.
Cette habitude d'être la norme des conseils dans les premiers jours de node.js. Mais ces jours, il ya aussi des sites web et des services qui expose node.js directement à internet. L' http.Server
module est maintenant assez bien de bataille testés sur internet pour être digne de confiance.