在我的 express 应用程序中,我已将视图引擎更改为 ejs。
有谁知道是否仍然可以利用视图模板?
实际上 Express 3.X 之后是不支持 layout.ejs 的,如果要使用 layout,需要自己完成以下步骤:
package.json
在您的文件中添加依赖项“express-partials”:“*”“依赖”:{ “快递”:“3.1.0”, “ejs”:“*”, “表达部分”:“*” }
npm install
以安装最新版本express-partials
express-partials
在你的app.js
var partials = require('express-partials');
app.use(partials());
下添加代码app.set('view engine', 'ejs');
app.js
之后,您可以设计您layout.ejs
并在您的文件中添加<%- body%>
块,layout.ejs
这就足够了并且运行良好。
你可以用这个模块来做......
https://github.com/aseemk/express-blocks
布局.ejs
<html>
<body>
<% include nav %>
<h1><%= title %></h1>
<%- body %>
</body>
</html>
登录.ejs
<% layout('layout') -%>
<form>...</form>
导航.ejs
<nav>
<% if ( session.logged_in ) { %>
<a href="/account">account</a>
<a href="/logout">logout</a>
<% } else { %>
<a href="/signup">signup</a>
<a href="/login">login</a>
<% } %>
<a href="/">home</a>
</nav>
我使用的是 express-partials,但我发现 express-blocks 更适合 ejs 和 express 3.x。每次都必须传递数据时,使用 partials 很痛苦。随着<% include whatever %>
数据已经可以访问。
在您的路线文件中,您可以像这样呈现:
exports.login.get = function(req, res){
res.locals.session = req.session;
res.render('login', { title: 'Login to your account' });
};
如果我没记错的话,Express.js 把它留给了模板引擎。因此,如果 ejs 不支持布局,那么您就不走运了。
安装 ejs-blocks 包npm install ejs-blocks
在您的 app.js 文件中导入包const engine = require('ejs-blocks');
并配置视图引擎
//settings
app.set('views', path.join(__dirname, 'views'));
app.engine('ejs', engine);
app.set('view engine', 'ejs');
在 express 默认情况下,文件的名称是因此在您的视图文件夹中layout.ejs
创建一个名为的文件,其中包含以下内容:layout.ejs
视图/layout.ejs
<html>
<head>
<title><%= title %></title>
</head>
<body>
<%- body %>
</body>
<%- blocks.js %>
</html>
<%= title %>
从路由调用文件时获取值
router.get("/", (req, res) => {
res.render("index", { title: "Hello world!" });
});
layout.ejs
在第一行导入文件,例如意见/index.ejs
<% layout('layout') -%>
<h1>Article title</h1>
<p>Content</p>
...
<% block('js', `<script>
...
</script>`) -%>
您可以使用block
将代码从视图插入到主布局。