Для того чтобы отображать в Express файлы шаблонов, необходимо...
Установите соответствующий пакет npm шаблонизатора:
Copy npm install ejs --save
В приложении подключите модуль:
Copy const ejs = require ( 'ejs' );
Задайте следующие параметры приложения:
views
, каталог, в котором находятся файлы шаблонов. Например:
Copy app .set ( 'views' , './views' );
view engine
, используемый шаблонизатор. Например:
Copy app .set ( 'view engine' , 'ejs' );
Создаёте шаблон, например, главной страницы с названием main.ejs
в папке views
:
Copy <!DOCTYPE html>
<html lang="ru">
<head>
<!-- Head -->
<%- include("partials/head.ejs") %>
</head>
<body>
<!-- Nav -->
<%- include("partials/nav.ejs") %>
<!-- Main -->
<main>
<div class="container">
<% if (content) { %>
<h1><%=content%></h1>
<% } %>
</div>
</main>
</body>
<!-- Footer -->
<%- include("partials/footer.ejs") %>
<!-- Scripts -->
<%- include("partials/scripts.ejs") %>
</html>
Затем для главной странице подгружаете шаблон страницы в app.js
и передаёте параметры на эту страницу:
Copy app .get ( '/' , (request , response) => {
response .render ( "main" , {
title : "Главная страница" ,
content : "Hello there!"
});
});
Если вы ещё не заметили по шаблону для главной странице то обратите внимание ещё раз... В шаблоне подключаются различные отдельные части (head, nav, footer, script).
По адресу /views/partials/
вы должны создать такие файлы с расширением .ejs
.
head.ejs nav.ejs footer.ejs scripts.ejs
Copy <meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title><% if (title) { %><%=title%><% } %></title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.5.3/dist/css/bootstrap.min.css" integrity="sha384-TX8t27EcRE3e/ihU7zmQxVncDAy5uIKz4rEkgIXeMed4M0jlfIDPvg6uqKI2xXr2" crossorigin="anonymous">
<style>
body {
display: flex; flex-direction: column; min-height: 100vh; height: 100% !important;
}
main {
flex: 1 0 auto; position: relative;
}
</style>
Copy <nav class="navbar navbar-expand-lg navbar-light bg-light">
<div class="container">
<a class="navbar-brand" href="/">Navbar</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<ul class="navbar-nav mr-auto">
<li class="nav-item">
<a class="nav-link" href="#">Ссылка</a>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Ссылка 2</a>
<div class="dropdown-menu" aria-labelledby="navbarDropdown">
<a class="dropdown-item" href="#">Пункт 1</a>
<a class="dropdown-item" href="#">Пункт 2</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="#">Пункт 3</a>
</div>
</li>
</ul>
<ul class="navbar-nav ml-auto">
<li class="nav-item">
<a class="nav-link" href="/login">Вход</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Регистрация</a>
</li>
</ul>
</div>
</div>
</nav>
Copy <footer>
<div class="container">
<p>MyCorp - Copyright © 2020</p>
</div>
</footer>
Copy <script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.1/dist/umd/popper.min.js" integrity="sha384-9/reFTGAW83EW2RDu2S0VKaIzap3H66lZH81PoYlFhbGU+6BZp6G7niu735Sk7lN" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.5.3/dist/js/bootstrap.min.js" integrity="sha384-w1Q4orYjBQndcko6MimVbzY0tgp4pWB4lZ7lr30WKz0vr/aWKhXdBNmNb5D92v7s" crossorigin="anonymous"></script>
Если вы в коде хотите, чтобы подключились локальные CSS файлы, тогда в app.js нужно дописать следующее:
Copy app .use ( express .static (__dirname + '/' ));
Обратите внимание, что мы используем CSS фреймворк Bootstrap 4.