From 1105f0366dc9d38c19b18f4001d8c1474e2dbc0e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=BC=D0=B8=D1=82=D1=80=D0=B8=D0=B9=20=D0=9C=D0=B0?= =?UTF-8?q?=D0=BC=D0=B5=D0=B4=D0=BE=D0=B2?= Date: Wed, 10 Jun 2026 18:39:37 +0300 Subject: [PATCH] fix: switch to express-ejs-layouts, pass title from controller --- package-lock.json | 6 ++++++ package.json | 1 + src/main.ts | 3 +++ src/web/web.controller.ts | 9 ++++++--- views/admin/clients.ejs | 2 -- views/admin/users.ejs | 2 -- views/auth/login.ejs | 2 -- views/auth/register.ejs | 2 -- views/profile/index.ejs | 2 -- 9 files changed, 16 insertions(+), 13 deletions(-) diff --git a/package-lock.json b/package-lock.json index d5cabb5..7bea344 100644 --- a/package-lock.json +++ b/package-lock.json @@ -30,6 +30,7 @@ "class-validator": "^0.14.1", "cookie-parser": "^1.4.7", "ejs": "^6.0.1", + "express-ejs-layouts": "^2.5.1", "helmet": "^8.0.0", "ioredis": "^5.5.0", "nestjs-pino": "^4.1.0", @@ -6472,6 +6473,11 @@ "url": "https://opencollective.com/express" } }, + "node_modules/express-ejs-layouts": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/express-ejs-layouts/-/express-ejs-layouts-2.5.1.tgz", + "integrity": "sha512-IXROv9n3xKga7FowT06n1Qn927JR8ZWDn5Dc9CJQoiiaaDqbhW5PDmWShzbpAa2wjWT1vJqaIM1S6vJwwX11gA==" + }, "node_modules/express/node_modules/cookie-signature": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", diff --git a/package.json b/package.json index e5f98ce..0f890d4 100644 --- a/package.json +++ b/package.json @@ -45,6 +45,7 @@ "class-validator": "^0.14.1", "cookie-parser": "^1.4.7", "ejs": "^6.0.1", + "express-ejs-layouts": "^2.5.1", "helmet": "^8.0.0", "ioredis": "^5.5.0", "nestjs-pino": "^4.1.0", diff --git a/src/main.ts b/src/main.ts index c14edb4..5822c44 100644 --- a/src/main.ts +++ b/src/main.ts @@ -4,6 +4,7 @@ import { Logger } from 'nestjs-pino'; import { NestExpressApplication } from '@nestjs/platform-express'; import * as helmet from 'helmet'; import cookieParser from 'cookie-parser'; +import expressLayouts from 'express-ejs-layouts'; import { join } from 'node:path'; import { existsSync } from 'node:fs'; import { AppModule } from './app.module'; @@ -41,6 +42,8 @@ async function bootstrap(): Promise { if (existsSync(viewsPath)) { app.setBaseViewsDir(viewsPath); app.setViewEngine('ejs'); + app.use(expressLayouts); + app.set('layout', 'layouts/main'); } const publicPath = join(process.cwd(), 'public'); diff --git a/src/web/web.controller.ts b/src/web/web.controller.ts index 2ed445e..1f5dc04 100644 --- a/src/web/web.controller.ts +++ b/src/web/web.controller.ts @@ -22,14 +22,14 @@ export class WebController { @Get('login') @Render('auth/login') loginPage() { - return {}; + return { title: 'Login' }; } @Public() @Get('register') @Render('auth/register') registerPage() { - return {}; + return { title: 'Register' }; } @UseGuards(AuthGuard('jwt')) @@ -51,7 +51,7 @@ export class WebController { createdAt: true, }, }); - return { user: profile }; + return { title: 'Profile', user: profile }; } @UseGuards(AuthGuard('jwt'), RolesGuard) @@ -79,6 +79,7 @@ export class WebController { where: { isActive: true }, }); return { + title: 'Admin', user: { email: jwtUser.email, role: jwtUser.role }, users, stats: { users: totalUsers, clients, activeSessions }, @@ -110,6 +111,7 @@ export class WebController { where: { isActive: true }, }); return { + title: 'Admin', user: { email: jwtUser.email, role: jwtUser.role }, users, stats: { users: totalUsers, clients, activeSessions }, @@ -133,6 +135,7 @@ export class WebController { where: { isActive: true }, }); return { + title: 'Admin - OAuth Clients', user: { email: jwtUser.email, role: jwtUser.role }, clients, stats: { users: totalUsers, clients: totalClients, activeSessions }, diff --git a/views/admin/clients.ejs b/views/admin/clients.ejs index 6601962..3b31b2a 100644 --- a/views/admin/clients.ejs +++ b/views/admin/clients.ejs @@ -1,5 +1,3 @@ -<% title = 'Admin - OAuth Clients'; %> -<% include ../layouts/main.ejs %>