Bonjour à tous,
Je débute sur nodejs depuis peu et je bute sur une façon de pensée. Je vais vous donner un exemple simplifié de ce que je cherche à mettre en place.
Sur mon site je me sert souvent d'une liste de catégorie ( ex:voiture, moto, avion, tondeuse ), cette liste est stockée en bdd pour modifiable via un backoffice. Je voudrais, lors de la connexion au site sur n'importe quelle page construire un tableau associatif lié à la session du visiteur
Ma façon de penser :
-connection au site
- testé si une session est active
- si pas de session active
- exécution requête sql
- construction tableau associative
- stockage du tableau dans la session
- si session active, rien à faire le tableau devrait déjà être stocké
En nodejs, j'ai mis en place mes routes :
Pour faire mes tests, dans mon fichier app.js j'ai ajouté avant les require:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 require('./routing/profile'); require('./routing/contact'); require('./routing/index'); ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 app.all('*', function (req, res, next){ if (!req.session.constanteLoaded) { lib.loadConstante(req, res, next); } else { res.locals = {session: req.session, categorie: req.session.categorie}; next(); } })
Mais encore une fois je me heurte à la logique des callbacks, lorsque mon controller envoie la page categorie est undefined.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 exports.loadConstante = function(req, res, next){ connection.query(mysql.format(req_categorie_sel1), function(err, rows) { for (var name in rows) { categorie[rows[name].nom_fr] = rows[name].idcategorie; } res.locals = {session: req.session, categorie: req.session.categorie}; req.session.constanteLoaded = true; next(); }); }
Et au deuxième affichage 'categorie' est bien remplie.
En cherchant sur google, j'ai trouvé des techniques pour faire du synchrone mais elles le plaisent pas.
Pourriez vous me dire si il y a une façon "propre" d'arriver au résultat recherché ?
Merci par avance.
Partager