Хорошо, у меня есть в основном статическая домашняя страница, но я хотел бы иметь частичные представления, которые для навигации, нижнего колонтитула и т.д. Я использую ejs и это выглядит следующим образом:
мой контроллер: home.js
// Dependencies
var express = require('express');
module.exports = {
get: function(req, res) {
app.set('view engine', 'ejs');
var model = {
layout:'home',
};
res.render('home');
}
};
В моем каталоге views есть nav, home и footer - все .ejs
Тогда фактический html-файл, очищенный от текста, будет выглядеть следующим образом.
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" >
<title>Tom Jones</title>
<!-- CSS -->
<link rel="stylesheet" href="/css/home.css" type="text/css" media="screen" >
</head>
<body>
<%- partial('nav') %>
<!--content part -->
<div id="showcontainer">
<section>
</section>
</div>
<div id="maincontainer">
<section>
</section>
</div>
</body>
</html>
Проблема При тестировании я сталкиваюсь с ошибкой partial is not defined. Я пробовал требовать ejs, но безуспешно.
Как сказал @Pickels, Partial был удален в версии 3.x. Однако последняя версия EJS предоставляет механизм для включения "частей", который называется "include":
https://github.com/visionmedia/ejs#includes
Включение происходит относительно шаблона с оператором include, например, если у вас есть "./views/users.ejs" и "./views/user/show.ejs", вы будете использовать <% include user/show %>. Включенный файл(ы) буквально включается в шаблон, после компиляции не выполняется IO, поэтому локальные переменные доступны для этих включенных шаблонов.
Следующая функция будет работать как замена вашей старой функции partial(). Для полной поддержки Express 3.x вам потребуется внести изменения в другие функции, но по большей части это работает хорошо (даже лучше - меньше кода и больше производительности).
<% include nav.ejs %> <!-- replaces your old <%- partial('nav') %> -->