fix: add HTMX middleware to disable layouts for AJAX requests

ISSUE (per Gemini consultation):
express-ejs-layouts was wrapping HTMX AJAX responses in full layout
Caused crashes because HTMX endpoints don't pass layout variables

FIX:
Added middleware to detect HX-Request header
Sets res.locals.layout = false for HTMX requests
HTMX endpoints now return raw HTML fragments

This fixes all 5 admin modules:
- Servers Matrix
- Player Management
- Grace Period (with real DB query)
- Audit Log
- Role Diagnostics

Credit: Gemini consultation - HTMX middleware pattern

Signed-off-by: Claude (Chronicler #57) <claude@firefrostgaming.com>
This commit is contained in:
Claude (Chronicler #57)
2026-04-03 18:13:06 +00:00
parent 4c7a7a0832
commit 86af46deca

View File

@@ -43,6 +43,15 @@ app.set('views', __dirname + '/views');
app.use(expressLayouts);
app.set('layout', 'layout'); // Default layout is views/layout.ejs
// HTMX Middleware: Disable layout wrapper for HTMX AJAX requests
// HTMX sends HX-Request header - these requests need raw HTML fragments, not full layout
app.use((req, res, next) => {
if (req.headers['hx-request']) {
res.locals.layout = false;
}
next();
});
// CRITICAL: Stripe webhook needs raw body BEFORE express.json() middleware
// Mounted at /webhooks/stripe to avoid conflict with /stripe checkout mount
app.use('/webhooks/stripe', stripeRoutes);