2017-10-15 16 views
0

J'ai un projet de serveur NodeJS fonctionnant correctement localement. Les variables de connexion sont stockées dans un fichier config.js. Ce fichier est inclus dans mon gitignore. Le code est écrit de manière à utiliser principalement les variables d'environnement du système, et si celles-ci n'apparaissent pas, tirez depuis config.js.Déploiement du projet NodeJS sur Web App-config.js se bloque en raison de gitignore (?)

J'ai mis en place une application Web Azure avec une intégration continue via notre référentiel Git. L'application se déploie bien, mais évidemment sans config.js.

Les appels d'API vers l'application renvoient une erreur 404. En regardant les journaux de diagnostic, je vois la demande à venir à travers correctement, et les erreurs comme ceci:

Buffer="The resource you are looking for has been removed, had its name changed, or is temporarily unavailable."

Je ne vois pas plus de détails que cela, et ne sais pas comment je peux obtenir des détails. J'ai supposé que ce qui cause l'erreur exige le fichier de configuration, qui est évidemment ignoré par git, et donc ne pas le faire à l'application web. Toutefois, lorsque je supprime les instructions d'importation et les références à config.js, l'erreur persiste.

Alors, deux questions:

1) Comment puis-je tester cette hypothèse d'une façon plus systématique qu'un simple essai et erreur?

2) Comment éviter de telles erreurs dans le futur?

+0

Avez-vous essayé en cours d'exécution au niveau local sans ce fichier? Cela résulterait de vérifier cette théorie –

Répondre

0

D'accord, vous avez une bonne réponse via l'excellent Node+React course on Udemy de Stephen Grider. Fondamentalement, vous avez besoin de trois fichiers: un fichier de configuration qui importe l'un des deux autres fichiers en fonction de l'environnement (production ou non). Ces deux fichiers exportent des objets avec des clés identiques, mais des valeurs tirées de l'environnement (en production) ou câblées (en développement). Le fichier dev est listé dans gitignore. Ensuite, dans le reste de votre application, il suffit d'importer ou de requérir config.js et d'utiliser les touches à partir de là.

Il ressemble à ceci:

config.js:

if (process.env.node_ENV === 'production') 
{ 
    module.exports = require('./prod'); 
} else { 
    module.exports = require('./dev'); 
} 

prod.js:

module.exports = { 
    secret: process.env.JWT_KEY, 
    conn: process.env.COSMOS_CONN, 
    sgKey: process.env.SENDGRID_API_KEY, 
    googleClientID: process.env.GOOGLE_CLIENT_ID, 
    googleClientSecret: process.env.GOOGLE_CLIENT_SECRET 
}; 

dev.js:

module.exports = { 
    secret: 'xyz', 
    conn: '123', 
    sgKey: 'sdsddf', 
    googleClientID: 'ddcxcx.apps.googleusercontent.com', 
    googleClientSecret: 'dcvccfssfdas' 
};