Comment servir des fichiers statiques dans AppEngine Standard et nodejs

La documentation indique que vous devez simplement mettre à jour votre app.yaml, comme vous le feriez pour n’importe quelle langue dans AppEngine. Il indique également plus tard que pour le développement local, vous souhaitez probablement que votre serveur réponde également aux requêtes statiques. Cependant, lorsque je mets à jour mon application.yaml très simple, elle doit être telle que:

runtime: nodejs8 handlers: - url: /apiEndPoint script: auto - url: /.* static_dir: public 

Il semble que toutes les requêtes finissent toujours par arriver dans mon script – qui renverra un 404 dans l’instance prod, puisque ces fichiers ne seront pas téléchargés. Je peux les forcer à être téléchargés, puis mon serveur nodejs répond aux requêtes statiques – mais je pensais que l’idée de cette application.yaml était de la configurer pour que les fichiers statiques soient servis en dehors de la logique de mon application?

Donc, pour être clair, vous pouvez héberger des fichiers statiques dans la production Nodejs Standard AppEngine sans avoir à utiliser un serveur JS . Cependant, pour le développement local, vous devez trouver un moyen de diffuser ces fichiers localement lorsque vous les utilisez sur votre ordinateur. Pour cette raison, vous placez le gestionnaire dans Express, pour les fichiers statiques, qui ne doivent jamais être touchés en production – puisque le gestionnaire app.yaml est le premier passage.

Si vous voulez être positif, Express.js ne fournit pas de fichiers statiques en production, vous pouvez le faire en faisant quelque chose comme ceci:

 // Production instances automatically have this environment variable. const isLocal = (process.env.NODE_ENV !== "production"); if(isLocal) { app.use(express.static('public')); } 

Les fichiers statiques sont téléchargés lors du déploiement, mais pas au même endroit que le code de l’application. Ils sont téléchargés dans l’infra de Google dédié à la diffusion directe de contenu statique. Cela pourrait être confirmé en augmentant la verbosité du journal de la commande de déploiement.

Lorsqu’une URL de demande correspond à l’un des gestionnaires statiques, dirigez-la vers cette infra dédiée, elle ne doit pas atteindre votre code d’application. Il devrait être relativement facile de confirmer avec un déploiement réel.

En ce qui concerne le développement local, je ne sais pas exactement comment se comporte le serveur Node.Js (en effet, les documents semblent indiquer qu’Express peut être nécessaire pour manipuler des fichiers statiques), mais le fichier Python se sert uniquement de fichiers statiques. app.yaml statique app.yaml gestionnaires, sans bash le code de l’application. Pourrait être à cause de la prise en charge de l’environnement standard Node.JS encore très nouveau.

Les fichiers statiques que vous souhaitez diffuser doivent être déployés avec votre code d’application avec gcloud app deploy .

Votre fichier app.yaml dit:

  • Toute demande correspondant à /apiEndPoint sera acheminée vers votre application Node.js
  • Toute autre URL de demande servira un fichier statique de votre dossier public et ne parviendra pas à votre application (une fois déployée).

Par exemple: /index.html servira public/index.html si ce fichier n’a pas été déployé, alors il retournera une page 404 .