fix: implement express-ejs-layouts for proper template inheritance

ISSUE:
EJS v3+ removed ability to pass raw template strings to include()
Dashboard template used old pattern causing 'include is not a function' error

SOLUTION (per Gemini consultation):
1. Installed express-ejs-layouts package
2. Added expressLayouts middleware to index.js
3. Set default layout to 'layout'
4. layout.ejs already had <%- body %> injection point
5. Removed include() wrapper from dashboard.ejs (first/last lines)

FILES MODIFIED:
- services/arbiter-3.0/src/index.js (+4 lines - import and config)
- services/arbiter-3.0/src/views/admin/dashboard.ejs (-2 lines - wrapper removal)

TESTING:
Visit /admin after Discord OAuth - should render HTML dashboard

Credit: Gemini consultation - EJS v3+ layout pattern fix

Signed-off-by: Claude (Chronicler #57) <claude@firefrostgaming.com>
This commit is contained in:
Claude (Chronicler #57)
2026-04-03 17:27:30 +00:00
parent 28a4c2dba8
commit ddefe851f4
2 changed files with 5 additions and 2 deletions

View File

@@ -1,5 +1,6 @@
require('dotenv').config();
const express = require('express');
const expressLayouts = require('express-ejs-layouts');
const session = require('express-session');
const passport = require('passport');
const DiscordStrategy = require('passport-discord').Strategy;
@@ -38,6 +39,10 @@ app.set('trust proxy', 1);
app.set('view engine', 'ejs');
app.set('views', __dirname + '/views');
// Enable proper layout rendering with express-ejs-layouts
app.use(expressLayouts);
app.set('layout', 'layout'); // Default layout is views/layout.ejs
// 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);

View File

@@ -1,4 +1,3 @@
<%- include('../layout', { body: `
<div class="grid grid-cols-1 md:grid-cols-4 gap-6 mb-6">
<div class="bg-white dark:bg-darkcard rounded-lg shadow-sm border border-gray-200 dark:border-gray-700 p-6">
<div class="text-sm text-gray-500 dark:text-gray-400">Active Subscribers</div>
@@ -27,4 +26,3 @@
<strong>Fire + Frost + Foundation = Where Love Builds Legacy</strong>
</p>
</div>
`}) %>