Я настроил экспресс для использования swig в качестве механизма шаблонов и / public в качестве каталога представлений и в статическом промежуточном программном обеспечении таким образом:
app.engine('html', engines.swig);
app.set('view engine', 'html');
app.set('views', __dirname + '/public');
app.use(express.static('public'));
Затем я настроилЭкспресс приложение для прослушивания запросов следующим образом:
app.use('/',(req,res)=>{
res.render('index', {
title: 'ciao'
});
})
В моем шаблоне у меня есть что-то вроде
<!DOCTYPE html>
<html lang="en">
<head>
<% for (var chunk in htmlWebpackPlugin.files.css) { %>
<link rel="preload" href="<%= htmlWebpackPlugin.files.css[chunk] %>" as="style">
<% } %>
<% for (var chunk in htmlWebpackPlugin.files.chunks) { %>
<link rel="preload" href="<%= htmlWebpackPlugin.files.chunks[chunk].entry %>" as="script">
<% } %>
</head>
<body>
<h1>{{ title }}</h1>
</body>
</html>
Но «title» не заменяется на «ciao» и отображается как есть.
Это должен быть распространенный сценарий, так что, вероятно, я что-то упускаю.Спасибо за вашу помощь !!!!;)
РЕШЕНИЕ :
!!!Будьте осторожны, это решение предоставляет вашему шаблону публичный доступ.(mysite.com/index.html вернет ваш шаблон) Кстати, это можно легко исправить.
Удалите это:
app.engine('html', engines.swig);
app.set('view engine', 'html');
app.set('views', __dirname + '/public');
Установите индекс в статическом промежуточном программном обеспечении:
app.use('',express.static('public',{
index: '_',
}));
Вместо res.render
используйте:
app.use('/',(req,res)=>{
return engines.swig(__dirname + '/public/index.html', {
title: "Ciao",
cache: true
}).then((html)=>{
return res.send(html);
}).catch((err) => {
throw err
})
})
Вам необходимо установить npm i --save consolidate
В основном вы используете index.html
в качестве шаблона и функции Swig Mix Swig Template +данные и возврат html.
Я буду дополнительно исследовать, если это решение повлияет на производительность, но не должно !!