Bonjour à tous !
Je travail sur un site perso que j'aimerai bien mettre en ligne. Coté front end le site utilise un framework javascript, vue.js (très proche d'angular pour ceux qui ne connaitraient pas) avec vue cli pour développer correctement. Coté base de donnée j'utilise mongoDb avec qui me permet de gérer la bdd et les utilisateurs sans trop me prendre la tête (par ce que je suis vraiment pas trés compétent en mongoDB il faut bien l'avouer).
En local tout fonctionne bien : j'écris mes templates vue.js, je fais un npm run dev
et en parallèle je lance dans la console le serveur deployd qui créer un fichier.js à la volé que j'ai juste à intégrer dans mon index.html pour permettre à mon site de parler avec la bdd. Tout roule comme sur des roulettes.
Maintenant j'aimerai passer à la mise en production est là que ça se gâte un peu. Je n'ai pas encore d'hébergeur mais j'ai regardé du coté de Gandi qui me semble attractif. Si j'ai bien compris, dans un hebergement de base on a juste le droit de lancer un fichier serveur.js, mais impossible de lancer une commande directement depuis la console (pas possible de lancer d'un coté un serveur.js et de l'autre via la console de lancer deployd). La solution est d'utiliser deployed comme un module node.js et de demander au fichier serveur.js de le lancer. Ca je crois que je sais faire. C'est là que je suis un peu perdu.
Comment lancer le point d'entrée du site ?
Quand j'héberge mon site et que je met à la racine disons un serveur.js qui s'occupe uniquement de lancer la bdd via le module deployd, ainsi qu'un fichier index.hmtl, est-ce ça fonctionne ? Je veux dire quand on héberge un site en php il suffit de mettre un fichier index.html à la racine et le serveur comprend que c'est ce qu'il faut envoyer comme point d'entrée quand on se connecte au site. Est-ce que dans un hebergement node.js c'est pareil ? Est-ce que le serveur va lancer le serveur.js (qui fera sa petite vie) et servir en page d'accueil le ficher index.html sans que j'ai besoin de le demander ?
Ou est-ce que le serveur va juste lancer le fichier serveur.js et c'est tout. Il ne fait rien d'autre, si on se connecte au site il n'affiche pas la page index.html tant que le serveur.js ne lui a rien demandé en ce sens. Dans ce cas il faut empressement (sans jeu de mot :p) que le fichier serveur.js demande l'affichage de la page index.html.
Si ça fonctionne comme dans ce dernier cas, quel doit être mon script serveur.js pour qu'il affiche le fichier index.html présent au même niveau ? Je débute en node.js et j'ai du mal à trouver comment simplement servir un fichier index.html quand on se connecte au port du serveur. Soit je trouve des trucs compliqués avec express et des template (dont je ne veux pas, moi je veux juste afficher le index.html, le routeur est interne avec vue.js, le serveur n'a vraiment rien besoin de faire ), soit j'ai un truc qui ne marche pas.
Voici mon serveur.js pour le moment :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | // serveur.js const deployd = require('deployd'); const http = require('http'); const fs = require('fs'); // on lance la bdd via deployd const options = {port: 3000, env : "development"}; const dpd = deployd(options); dpd.listen(); // Chargement du fichier index.html affiché au client const server = http.createServer(function(req, res) { fs.readFile('index.html', 'utf-8', function(error, content) { res.writeHead(200, {"Content-Type": "text/html"}); res.end(content); }); }); // on lance le serveur server.listen(8080); |
La partie base de donnée fonctionne bien, mais la partie qui consiste a afficher le fichier index.html un peu moins. Mon fichier index.html charge du css et du js et c'est là que ça bug. Quand je vais sur localhost:8080, le html de index.html se charge bien mais il bug en important les fichiers css et js en affichant cette erreur :
Quand je vais voir l'erreur dans le js, je tombe sur ça : http://prntscr.com/dama6g
Que fait mon html dans mon contenu js ?? (pour l'instant mon contenu du app.js est un simple console.log("test") afin de voir si ça fonctionne, donc le souçis ne vient pas du code du app.js). J'avoue que je suis un peu perdu. Le problème semble vraiment venir de l'incorporation des scripts, si dans le index.html je met du js directement dans une balise <script></script> il est interprété sans souçis. Mais impossible de charger les fichiers externes…
Merci d'avance pour vos réponses !
PS : c'est mon premier projet avec node.js que j'essaye de mettre en prod alors pas taper si je fais n'importe quoi. PS 2 : Si vous avez une recommandation à me faire en terme d’hébergeur qui est meilleure que gandhi, je suis preneur.