Changeset 6fab3f3 in Klonkt for src/routes/guardian.js
- Timestamp:
- 08/08/2026 10:42:20 PM (4 weeks ago)
- Branches:
- main
- Children:
- cae7bfc
- Parents:
- 060d4a5
- git-author:
- Robin <roboburr@…> (08/08/2026 10:42:18 PM)
- git-committer:
- roboburr <roboburr@…> (08/08/2026 10:42:20 PM)
- File:
-
- 1 edited
-
src/routes/guardian.js (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
src/routes/guardian.js
r060d4a5 r6fab3f3 182 182 183 183 // ── JSON state for refreshes ───────────────────────────────────────────── 184 router.get('/api/state', requireAuth, (req, res) => { 185 const site = siteForUser(req); 186 if (!site) return res.status(404).json({ error: 'no_site' }); 187 // Het paneel tikt elke 45 seconden, of er nu iets gebeurd is of niet. Met een 188 // ETag kost stilte een lege 304 in plaats van het hele paneel (Barts punt, 9-8). 189 return AP.sendMaybe304(req, res, dashboardState(site, resolveLang(req)), { contentType: 'application/json' }); 184 /** 185 * De staat van het paneel, desgewenst als LANGE POLL (Barts opdracht, 9-8). 186 * 187 * Zonder `wait` gedraagt de route zich exact zoals altijd. Met `wait` blijft het 188 * antwoord hangen tot er iets gebeurt dat de guardian moet verwerken, of tot de 189 * tijd om is -- dan een lege 304. 190 * 191 * EERST KIJKEN, DAN WACHTEN. Veranderde er iets tussen het vorige antwoord en 192 * dit verzoek, dan is de merksteen nu al anders en gaat het antwoord METEEN de 193 * deur uit. Zou je eerst gaan wachten, dan blijft nieuws dat net in dat gaatje 194 * viel vijfentwintig seconden liggen -- en juist bij een hulpvraag is dat de 195 * verkeerde vertraging. 196 * 197 * WAKKER OP ALLES. De guardianship-module zendt veertien soorten gebeurtenissen 198 * uit en die wekken allemaal (wakeGuardian); daarnaast wekt de tijdlijn (onNews), 199 * want de berichten van je wards staan in ditzelfde scherm. 200 */ 201 router.get('/api/state', requireAuth, async (req, res) => { 202 const site = siteForUser(req); 203 if (!site) return res.status(404).json({ error: 'no_site' }); 204 const stuur = () => AP.sendMaybe304(req, res, dashboardState(site, resolveLang(req)), { contentType: 'application/json' }); 205 206 const wachtS = Math.min(Math.max(parseInt(req.query.wait, 10) || 0, 0), 50); 207 const merk = req.headers['if-none-match']; 208 if (!wachtS || !merk) return stuur(); 209 210 // Is er nu al iets anders? Dan niet wachten. 211 const nu = AP.etagFor(JSON.stringify(dashboardState(site, resolveLang(req)))); 212 if (nu !== merk) return stuur(); 213 214 await new Promise((klaar) => { 215 let af = false; 216 const eind = () => { if (af) return; af = true; clearTimeout(t); offG(); offN(); klaar(); }; 217 const offG = AP.onGuardian(site.slug, eind); 218 const offN = AP.onNews(site.slug, eind); 219 const t = setTimeout(eind, wachtS * 1000); 220 // Hing de client op, dan houdt niemand dit antwoord meer vast. 221 res.on('close', eind); 222 }); 223 if (res.writableEnded) return undefined; 224 return stuur(); 190 225 }); 191 226
Note:
See TracChangeset
for help on using the changeset viewer.
![(please configure the [header_logo] section in trac.ini)](/chrome/site/your_project_logo.png)