Problème de route principale

Par Gatien Tafforeau, il y a 10 ans


Javascript NodeJS

Bonjour,

Je partage d'abord mon code et explique ensuite mon problème

var express = require('express'); //Module express requis (Framework node js) var http = require('http'); var path = require('path'); //Module Path requis, pour les chemins de fichier //var util = require('util'); var bosyParser = require("body-parser"); //Utile pour lire les réponses des formulaires var cookieSession = require('express-session'); var cookieParser = require('cookie-parser'); //La session est stocké dans un cookie, nous utilisons ce parse var bosyParser = require("body-parser"); var util = require('util'); var md5 = require('md5'); var app = express(); //Instantiation du serveur app.set('port', process.env.PORT || 8080) //Port d'écoute app.use(bosyParser.urlencoded({extended: true})); //Utile pour lire les données envoyés dans les formulaires. app.use(express.static(path.join(__dirname, '../www'))); //Pour pouvoir utiliser des chemins relatifs dans les fichier utilisés //Autorisé les cookie dans les entête html app.use(cookieParser()); // Session management // Internal session data storage engine, this is the default engine embedded with connect. // Much more can be found as external modules (Redis, Mongo, Mysql, file...). look at "npm search connect session store" app.use(cookieSession({ secret: 'keyboard cat', resave: false, saveUninitialized: true })) var server = http.createServer(app).listen(app.get('port'), function(){ console.log('Serveur express ouvert au port ' + app.get('port')); }); //Création du serveur et écoute du port 8080 exports.server = server; //Sert pour les inscription app.post('/inscription', function(req, res){ var name = req.body.inscriptionPseudo; var mdp = req.body.inscriptionPassword1; req.session.pseudo = name; var compte = new Object(); compte.name = name; compte.mdp = mdp; compte.req = req; compte.res = res; db.executeSelectQuery("select * from user where pseudo = \'" + name + "\'", inscription, compte); }) //Fonction qui gère le formulaire de connexion app.post('/connexion', function(req,res){ var name = req.body.connexionPseudo; var mdp = req.body.connexionPassword; // Increment "index" in session req.session.pseudo = name; var compte = new Object(); compte.name = name; compte.mdp = mdp; compte.req = req; compte.res = res; var requette = "SELECT * FROM user WHERE pseudo = \'" + req.session.pseudo + "\' AND password = \'" + md5(mdp) + "\'"; db.executeSelectQuery(requette, connexion, compte); }) app.post('/co',function(req,res){ console.log("Session id vaut : "+ req.session.pseudo); res.redirect('/home'); }) //On renvois le fichier index.html lorsque l'on cherche le chemin / app.get('/', function(req, res){ console.log('passe1'); if(req.session.pseudo){ console.log('passe2'); res.redirect('/home'); }else{ console.log('passe3'); res.redirect('/login'); } }) //On renvois le fichier index.html lorsque l'on cherche le chemin / app.get('/login', function(req, res){ res.sendFile(path.resolve(__dirname + '/../www/index.html')); //Envoi à la page de connection }) h //Renvois la page home app.get('/home', /*[requireLogin],*/ function(req, res){ res.sendFile(path.resolve(__dirname + '/../www/acceuil.html')); //Envoye la page d'accueil })

EN gros mon problème est tous simple, je voudrais que lorsqu'un utilisateur tape l'adresse de mon site il tombe sur la route principale qui me semble être '/' . Mais il en est tout autrement, quoi qu'il arrive, l'utilisateur ne passe par aucune route et il est redirigé sur la page "index.html".

Je ne comprend pas pourquoi.

Quelqu'un serait-il la raison?

Merci d'avance.

10 réponses

Huggy, il y a 10 ans

Si pseudo n'est pas défini en session, l'utilisateur est redirigé vers /login
et /login retourne index.html

Lartak, il y a 10 ans

Bonsoir.
Tu sembles bien aimer te contredire :

je voudrais que lorsqu'un utilisateur tape l'adresse de mon site il tombe sur la route principale qui me semble être '/' . Mais il en est tout autrement, quoi qu'il arrive, l'utilisateur ne passe par aucune route et il est redirigé sur la page "index.html".

Puis dans le commentaire correspondant à la racine du site :

On renvois le fichier index.html lorsque l'on cherche le chemin /

Si ta logique diffère entre le moment ou tu codes et ta réflexion externe, tu vas avoir du mal à t'en sortir.
Et puis je vois mal comment il est possible de rester à la racine de ton site étant donné que dans le routing correspondanttu ne fais que des redirections /login et /home.
Pour faire simple, voici la traduction de ton routing correspondant à l'appel de la racine du site :

  • Si l'utilisateur est connecté rediriges le vers /home
  • Si l'utilisateur n'est pas connecté rediriges le vers /login

Donc, dans les deux cas, lorsque la racine de ton site est appelée, l'utilisateur ne pourra jamais y accéder.

Gatien Tafforeau, il y a 10 ans

Merci pour la rapidités de vos réponses.

Je pense que j'ai dû mal m'expliquer, je sais très bien que :
-Si l'utilisateur est connecté rediriges le vers /home
-Si l'utilisateur n'est pas connecté rediriges le vers /login

c''est l'effet voulu. Mon problème n'est pas vraiment ça.

J'ai déclaré cette route :

app.get('/', function(req, res){ console.log('passe1'); if(req.session.pseudo){ console.log('passe2'); res.redirect('/home'); }else{ console.log('passe3'); res.redirect('/login'); } })

Comme vous pouvez le voir, j'ai mis des log qui doivent s'afficher sur la console node.
Mais lorsque je tape "localhost:8080" aucun log précisant cette route ne s'affiche.

Je ne comprend pas comment ça se fait que je n'ai pas de log.

Defy, il y a 10 ans

le console log ne ne se fait pas du tous dans le navigateur mais dans ta console node que tu lance pour executer le script

Gatien Tafforeau, il y a 10 ans

je le sais très bien...
J'affiche pas mal de message avec console.log(); donc je sais où il s'affiche.

Syals, il y a 10 ans

Par hasard.

Lorsque tu fais un f5 (refresh), tu resterais pas sur /login ou autre ? Tu reviens bien sur / ?

Parce que le console.log chez moi il marche, en dehors du h qui se balade ligne 103.

Gatien Tafforeau, il y a 10 ans

ça ne change rien, mais j'ai trouvé ce qui déconne, c'est que nativement, quand node js trouve un fichier index.html dans un répertoire il l'exécute sans lire les routes.

tleb, il y a 10 ans

ça ne change rien, mais j'ai trouvé ce qui déconne, c'est que nativement, quand node js trouve un fichier index.html dans un répertoire il l'exécute sans lire les routes.

Nativement, nodejs ne crée même pas de serveur HTTP. Tu es sûr que tu as pas un middleware qui fait ça plutôt ?

Gatien Tafforeau, il y a 10 ans

Je suis sûr de ne pas avoir de middleware qui le fasse.
Mais dans ce script node, j'ai déclaré :

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

Ce qui permet à node js de savoir dans quel dossier chercher