web-dev-qa-db-fra.com

Meilleures pratiques pour la construction d'un site Web à l'aide de Node.js

Je me demandais comment on pourrait développer un site Web à partir de zéro avec Node.js. Je comprends comment je pourrais éventuellement le faire, mais je suis intéressé par le meilleur pratique du design.

J'ai besoin de ce site théorique pour:

  1. Faites beaucoup de AJAX
  2. Être très simple
  3. Être relativement petit
  4. Connectez-vous à ... disons un serveur MySQL

En PHP, construire un site Web assez petit était très simple - j'ai installé PHP sur Apache et un serveur MySQL, puis je fais quelque chose comme:

  • includes/db/ qui possède connect.php pour se connecter à la base de données, un fichier avec des fonctions communes à la base de données, etc.
  • includes/layout/ qui contient des éléments tels que footer.php, header.php et d’autres éléments liés à la présentation
  • includes/users/ pour gérer les actions liées à l'utilisateur

Ensuite, PHP, laissez-vous juste construire des pages et inclure ces fichiers ensemble pour former un site Web - je pourrais faire quelque chose comme:

<?php
   require_once('inclues/users/user_session.php');
   require_once('inclues/db/connect.php');
   require_once('inclues/design/header.php')
?>

// Other php or html or related content relating to the page

<?php
   require_once('inclues/.../footer.php');
?>

Je me demandais ce qui pourrait être similaire dans Node.js - je cherche un moyen d'accomplir ceci qui est comme simple, rapide et simple comme possible.

Si la réponse n'est pas simple, j'aimerais une recommandation de livre, cela ne me dérange pas de lire.

J'adore la programmation événementielle, j'adore les capacités de JavaScript et je suis vraiment enthousiasmé par Node.js. Je veux apprendre à développer ce genre de choses avec le bon chemin depuis le début.

79
Benjamin Gruenbaum

Pour commencer par la mauvaise nouvelle: Node.js est une technique assez récente, je pense que vous constaterez que le processus de création d’un site Web à part entière et de son maintien/fonctionnement sera très différent de ce qu’il est. vous êtes actuellement habitué.

Josh3736 ajoute: Une fois que vous avez compris le fonctionnement de Node.js et de ses différents packages (Connect, Express), j'ai découvert que vous pouvez développer de nouveaux sites très rapidement.

Les aspérités qui existent actuellement dans Node.js, combinées au rythme rapide de son développement et à tous les modules impliqués, peuvent toutefois compliquer les choses et rendre les choses moins simples, rapides et simples que vous le souhaiteriez.

Ayant cela à l'écart, voici la bonne nouvelle:

Le Node Package Manager, NPM dispose de nombreux outils et frameworks permettant d'étendre les fonctionnalités de base de Node.js, ce qui permet de créer un serveur Web.

Le plus notable serait Express Framework , qui contient presque tout ce dont vous avez besoin pour faire fonctionner un serveur Web (y compris les cookies, les sessions et le routage du chemin d'accès). De plus, Express prend en charge les partiels, qui s’occupent de votre en-tête et de votre pied de page.

Express est construit au-dessus de Sencha's Connect . Les cookies et les sessions sont réellement alimentés par Connect. Express simplifie votre routage et gère les vues/partiels. Donc, si vous n'avez pas besoin de tous les gadgets fournis avec Express, vous pouvez simplement vous connecter à Connect.

Si vous aimez utiliser des modèles pour ces partiels, le Jade Template Engine peut accélérer les choses. Bien que Josh3736 indique que Jade est lent et significatif. Un aperçu plus complet peut être trouvé ici , qui inclut son favori, doT . (J'utilise personnellement Node.js pour socket.io uniquement sur les applications, il est donc une meilleure source que moi pour les modèles).

Vous pouvez vous connecter à MySQL à partir de Node.js en utilisant le module db-mysql , mais si vous n'en avez pas besoin, car vous accédez à des données connectées à un À l'heure actuelle, je conseillerais d'utiliser une approche plus ... moderne, qui consiste à utiliser une base de données NoSQL , comme le semblent la plupart des projets de Node.js. MongoDB via Mongoose est le moyen le plus populaire.

Ou si vous ne souhaitez stocker que les objets qui vous intéressent, optez plutôt pour Redis (dont vous aurez probablement besoin de toute façon).

Une fois votre site Web terminé, vous devrez le déployer et vous assurer qu'il continue de fonctionner. Il existe plusieurs façons de le faire, par exemple utiliser la prise en charge intégrée du cluster ou utiliser le module plus convivial forever npm. Voir ceci SO question du mien pour plus d'informations.

Conclusion :

Voici ce que j'essaie de comprendre:

Demander quelle est la meilleure pratique pour créer un site Web dans Node.js revient à demander quelle est la meilleure façon de créer un site Web dans PHP est: 100 développeurs vous donneront 100 réponses différentes .

NPM a la chance de disposer d’excellents frameworks qui simplifient énormément de tâches, mais tout est basé sur les préférences, qui sont vraiment ce qu’il faut faire.

Comme je l'ai dit, Node.js est encore une technique assez récente, de sorte qu'aucun cadre ni aucun outil supplémentaire n'a encore été défini comme "norme de facto"; pour la plupart des choses que vous essayez de faire, il existe probablement différentes alternatives, et attendez-vous à ce que votre code se casse lors de l'utilisation de la plupart d'entre elles lors des mises à jour, car le développement de Node.js lui-même et de la plupart des modules est très rapide. Vous devrez suivre.

Assembler le tout :

Comme je l’ai dit, mon principal objectif de production pour Node.js est de pouvoir utiliser socket.io , je n'ai donc pas de bons exemples de production (et comme je suis sur le point de partir pour des vacances bien méritées, je n'ai pas le temps de les préparer non plus). Il y a quelques bons exemples cependant:

Encore une fois, le chemin à parcourir (et par la suite l'exemple à suivre) dépend grandement de vos objectifs ultimes et des techniques choisies, mais heureusement, de nombreuses ressources sont disponibles pour tous les choix disponibles. La plupart des modules utilisent des référentiels GitHub bien documentés et incluent des exemples en combinaison avec les modules les plus populaires (voir le /examples/ dir qui semble être présent dans la plupart des dépôts).

Bonne chance! (Et merci à Josh3736 pour rectifier mes erreurs.)

185
Rem.co