Newsgroup: it.comp.lang.javascript
Titolo: Node+Express: passare variabili alla view

Ciao a tutti,
 
come da subject, questa è una domanda su Node.js ed Express. Non 
essendoci gruppi in italiano sull'argomento, ho pensato di postare qui.
Se dà fastidio ditelo senza problemi che cerco altri posti dove 
chiedere. :)
 
Sto seguendo alcuni tutorial su Node.js, e in particolare su Express.
Sto usando i template in EJS (perché la sintassi di Jade mi dà fastidio 
fisico :)
 
In uno dei tutorial si usa session, per memorizzare la sessione 
dell'utente, e usa dynamicHelpers() per "esportare" l'oggetto sessione 
verso la view, dall'interno di una route.
 
Purtroppo da express 3.0 dynamicHelpers non c'è più.
Allora ho googlato, e trovato che posso usare app.locals.use(...).
Purtroppo era solo nelle 3.0beta, rimosso nella 3.0rc e, naturalmente, 
non più reintrodotto.
 
Ora sembra che sia necessario usare app.use(function...) PRIMA di app.use
(app.router)
 
Ci ho provato:
 
app.use(function(req, res) {
 res.locals.session = req.session;
});
 
E ora quando carico una pagina va in loop (non so dove, non logga niente, 
e dopo un po' va in timeout il browser.
 
Se tolgo quelle righe, e lascio, dentro routes/session.js, il "vecchio":
 
app.use(function(req, res) {
 app.locals.session = req.session;
});
 
mi torna
 
ReferenceError: /.../views/layout.ejs:1
session is not defined
 
A quella riga c'è questo:
 
<% if (session) { %>
 
Non si trova documentazione (anche il changelog tra 2.x e 3.x è 
assolutamente incomprensibile per chi non conosce gli internals di 
express...) e i post su stackoverflow parlano quasi tutti della 2.0 o 
della 3.0beta, relegando informazioni come quella suddetta a commenti 
sibillini di 2 righe, senza uno straccio di esempio.
 
Qualsiasi aiuto è ben accetto.
Grazie mille.

 Grazie mille.
 
 
Ciao,
   premetto che non ho mai usato Express, quindi la mia risposta e' forse non proprio sensata.
 
Come framework per node.js io ho usato Meteor (
http://www.meteor.com/
) e mi e' tutto sembrato piuttosto scorrevole.
 
Non sono andato molto a fondo ma ho creato una chat room, con login e messaggi privati in poche ore, penso valga la pena darci un occhiata, anche perche' sembra sia finanziato per svariati milioni di USD (il che dovrebbe garantirne la vita). Come database si interfaccia con MongoDB.
 
Ciao
J

 });
 
Risolto l'arcano.
 
Ero convinto che i middleware fossero gestiti "tipo PubSub", invece sono 
"tipo multitasking cooperativo".
 
E` bastato modificarlo così:
 
app.use(function(req, res, next) {
 res.locals.session = req.session;
 next();
});
 
per farlo funzionare.
 
Ho comunque capito che la documentazione intorno a tutto quello che 
riguarda node.js è quasi inutile. Tutti (o quasi) fanno lunghe liste di 
JSDoc e di changelog, dando per scontato che tu sappia già come 
strutturare un'applicazione, e si dimenticano che la base utenti è 
ridottissima, e che se non ne attiri di nuovi prima o poi ti mollano e 
tornano a PHP/Ruby/Java/.Net. :/
 
Grazie a Jeff per l'indicazione di Meteor. Sembra che almeno la 
documentazione sia decente, ma da una prima occhiata molto veloce sembra 
più orientato alle app molto sbilanciate client-side più che a siti o app 
server-side.
 
Bye.