Jade je super šablonovací jazyk. Pokud jste opravdu líný programátor, pak se vám bude líbit. Jeho asi největší výhodou je maximální úspornost. Vůbec se nepoužívají párovací tagy a celý kód je strukturovaný jen dle odsazení. Něco ala Python. Až si na to zvyknete, bude vám HTML opravdu vadit…

Jade template:

Kód je daleko skromnější a přitom daleko přehlednější…
A možná i díky tomu se dá do šablony lépe integrovat jakákoliv aplikační logika. Přímo na serveru můžete v šablonu ohýbat, modifikovat… Něco jako je celé PHP 🙂 A přitom jasně zůstává vaše NodeJS aplikace nad šablonou, které jen předáváte nějaka data a necháváte ji dál dělat co má. A to z ní děla další živý kus celé aplikace. Beze sporu výhoda, ať už si o aplikační logice v prezentační vrstvě myslíte cokoliv…

No a tady se do hry dotávájí sessions, proměnné jen mezi aplikací a konkrétním uživatelem vaší aplikace (webové stránky).
Ty se v NodeJS a ExpressJS asi nejčastěji řeší přes NPM balíček express-session a pak nějaký backend pro jejich ukládání, ale to nutně není podmínkou. Balíček se postará i o toto. Já tedy používám connect-redis, ale je na vás jak své session proměnné budete ukládat.

A teď se dostávám k tomu jak to celé funguje spolu dohromady.

NodeJS, ExpressJS, Jade, Session

Pokud už pracujete se sessions, pak k nim máte přístup v objektu request a to je vám v momentě. kdy už jste v prezentační fázi a pracujete s objektem response celkem k ničemu.
Řešení je nasnadě: proměnnou session umístit do datové struktury, kterou pak předáte funkci render, která se postará o vykreslení šablony:
NodeJS obsluha pro routu /

Super, tohle funguje, ale pokud furt něco renderujete a máte hafo šablon, pak je to vopruz…

Alternativní řešení pomocí middleware

Abych měl k proměnné session přísup v každé jade šabloně a nemusel ji pokaždé předávat přes slovník s proměnnými ve funkci render. Napsal jsem si jednouduchou middleware funkci, která je volána pro každé zpracování requestu:

Proměnná session je tak dosupná přímo v Jade šabloně jen pomocí svého jména, jako byste ji předaly v objektu ve funkci render.

Holla!

Middleware je docela silná stránka frameworku ExpressJS. Můžete si sami napsat vlastní celou rouru obslužných rutin, které se budou postupně provádět. V každéé z nich mlžete mít nějakou logiku, zpracování dat a podobně. Síla. Extrémně použitelné.