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 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
require('./routing/profile');
require('./routing/contact');
require('./routing/index');
...
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
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();
	}
})

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();
		});	
}
Mais encore une fois je me heurte à la logique des callbacks, lorsque mon controller envoie la page categorie est undefined.
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.