web-dev-qa-db-fra.com

Que signifie exactement «servir des fichiers statiques»?

Jusqu'à présent, j'ai toujours développé mes applications côté client sans qu'aucun de mes propres serveurs ne s'exécute derrière, en utilisant le serveur Web intégré de Webstorm pour servir mon contenu.

Ce que je vois fréquemment lorsque les gens utilisent Node avec Express pour agir en tant que serveur Web, c'est le débat sur la question de savoir si vous devez mettre vos fichiers html avec node ou avec le code client.

Je comprends que les fichiers javascript qui sont inclus en html ou css sont mieux stockés dans le répertoire client?

Donc ma première question est, avec une structure de dossiers comme celle-ci

app/
  client/ js files
  server/ node files

Devez-vous inclure vos pages html dans votre serveur ou votre répertoire client?

Deuxièmement:

Parfois, je vois des gens utiliser express.static pour les fichiers statiques, qu'implique exactement les fichiers statiques ici? Aujourd'hui, la plupart des sites Web ne sont plus des documents statiques mais sont des fichiers qui sont modifiés par javascript en manipulant le DOM, donc je ne pense pas qu'un fichier html devrait être considéré comme un fichier statique?

Pour autant que je puisse voir, le seul avantage que j'ai avec l'utilisation de Node au lieu du serveur Web intégré est si je veux avoir accès à la base de données.

26
Robin-Hoodie

Aujourd'hui, la plupart des sites Web ne sont plus des documents statiques mais sont des fichiers qui sont modifiés par javascript en manipulant le DOM, donc je ne pense pas qu'un fichier html devrait être considéré comme un fichier statique?

Les fichiers de vos pages elles-mêmes sont toujours statiques. Autrement dit, vous ne les créez pas dynamiquement avec du code côté serveur. Ce qui se passe dans le navigateur n'a pas d'importance dans ce contexte ... l'idée est que vous n'avez pas besoin de générer ces fichiers à la volée, car leur contenu ne change pas.

Je comprends que les fichiers javascript qui sont inclus en html ou css sont mieux stockés dans le répertoire client?

L'endroit où vous stockez vos fichiers sur le serveur n'a pas d'importance. Ce qui importe, c'est que vous ne souhaitez généralement pas servir de fichiers statiques à partir de votre application Node.js. Des outils comme express.static sont uniquement à des fins de commodité. Parfois, vous pouvez avoir une application à faible trafic. Dans ces cas, il est parfaitement acceptable de servir des fichiers avec votre application Node.js. Pour tout ce qui a une charge de trafic décente, il est préférable de laisser le service statique à un vrai serveur Web tel que Nginx, car ces serveurs sont beaucoup plus efficaces que votre application Node.js.

Vous devez conserver votre code d'application (code qui sert des réponses dynamiques, comme un serveur API) dans votre application Node.js.

C'est également une bonne idée de placer votre application Node.js derrière un proxy comme Nginx afin que le proxy puisse gérer toutes les interactions avec le client (comme les clients lents alimentés à la cuillère), laissant votre application Node.js faire ce qu'elle fait de mieux. Encore une fois cependant, dans les situations de faible trafic, cela n'a pas d'importance.

31
Brad

Parfois, je vois des gens utiliser express.static pour les fichiers statiques, qu'est-ce que cela implique exactement ici?

Je pense que vous faites référence à ce morceau de code généralement trouvé dans le fichier app.js D'une application express:

app.use(express.static(path.join(__dirname, 'public')));

express.static() est un peu de middleware qui mappe les noms de répertoire au répertoire de chemin pour une recherche facile. Vous aurez généralement:

- public
  |_ javascripts
  |_ stylesheets
  |_ images

Si vous avez un script dans votre répertoire javascripts, vous n'avez pas besoin de taper le chemin complet pour l'inclure. Juste:

./javascripts/script.js

Les fichiers statiques sont mieux considérés comme des fichiers qui ne sont pas inclus par quelque chose comme NPM ou Bower. Ce sont vos propres scripts, feuilles de style, images, etc. Cela n'a rien à voir avec le fait que la page soit dynamique ou statique.

Quant à votre première question:

Je ne suis personnellement pas sûr de la nécessité de ce type d'architecture de projet si vous utilisez un nœud. Si vous utilisez un nœud et quelque chose comme Ember.js ou Angular pour votre application côté client, je mettrais personnellement mes scripts d'application réels dans le public/javascripts/ répertoire. Mais c'est juste moi.

À la fin de la journée, choisissez une structure de projet que vous aimez et respectez-la. Si d'autres personnes travaillent sur le projet, respectez les conventions communes. Cela rend la vie plus facile.

7
JDillon522