Nodejs 如何在客户端试用ejs
Nodejs 如何在客户端试用ejs
在examples中找到一份文件 <html> <head> <script src="…/ejs.js"></script> <script id=“users” type=“text/template”> <% if (names.length) { %> <ul> <% names.forEach(function(name){ %> <li><%= name %></li> <% }) %> </ul> <% } %> </script> <script> onload = function(){ var users = document.getElementById(‘users’).innerHTML; var names = [‘loki’, ‘tobi’, ‘jane’]; var html = ejs.render(users, { names: names }); document.body.innerHTML = html; } </script> </head> <body> </body> </html>
但问题是我想在服务器端的.ejs中放置一份模板(不需要在服务器端解析),在服务器端是会报错的
有没有什么好办法?
要在客户端使用 EJS 模板,你需要确保你正确地引入了 EJS 库,并且你的模板被正确地嵌入到 HTML 中。以下是一个详细的步骤和示例代码来展示如何实现这一点。
步骤
-
引入 EJS 库: 在客户端使用 EJS 需要先加载 EJS 库。你可以通过 CDN 引入,或者下载后自行引入。
-
创建模板: 在 HTML 文件中定义一个
<script>
标签,用于存放 EJS 模板。type
属性可以设置为text/template
或者application/json
等,以避免浏览器将其视为 JavaScript 代码。 -
渲染模板: 使用 EJS 的
render
方法将数据填充到模板中,并将结果插入到页面的某个部分。
示例代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>EJS in Client-Side Example</title>
<!-- 引入 EJS 库 -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/ejs/3.1.7/ejs.min.js"></script>
</head>
<body>
<!-- 定义 EJS 模板 -->
<script id="user-template" type="text/template">
<% if (names.length) { %>
<ul>
<% names.forEach(function(name){ %>
<li><%= name %></li>
<% }) %>
</ul>
<% } else { %>
<p>No users found.</p>
<% } %>
</script>
<div id="content"></div>
<script>
// 页面加载完成后执行
window.onload = function() {
// 获取模板字符串
var template = document.getElementById('user-template').innerHTML;
// 定义数据
var data = {
names: ['loki', 'tobi', 'jane']
};
// 渲染模板
var renderedHtml = EJS.render(template, data);
// 将渲染后的 HTML 插入到页面中
document.getElementById('content').innerHTML = renderedHtml;
};
</script>
</body>
</html>
解释
-
引入 EJS 库:
<script src="https://cdnjs.cloudflare.com/ajax/libs/ejs/3.1.7/ejs.min.js"></script>
这行代码通过 CDN 引入了 EJS 库。
-
定义 EJS 模板:
<script id="user-template" type="text/template"> <% if (names.length) { %> <ul> <% names.forEach(function(name){ %> <li><%= name %></li> <% }) %> </ul> <% } else { %> <p>No users found.</p> <% } %> </script>
这个
<script>
标签中的内容是一个 EJS 模板,它包含了一些条件逻辑和循环结构。<% ... %>
用于执行 JavaScript 代码,<%= ... %>
用于输出变量值。 -
渲染模板:
window.onload = function() { var template = document.getElementById('user-template').innerHTML; var data = { names: ['loki', 'tobi', 'jane'] }; var renderedHtml = EJS.render(template, data); document.getElementById('content').innerHTML = renderedHtml; };
当页面加载完成后,获取模板字符串并使用
EJS.render
方法将其与数据对象一起渲染成最终的 HTML 字符串,然后将其插入到页面中指定的元素里。
这样,你就可以在客户端使用 EJS 模板了。
要在客户端使用 EJS 模板引擎,并且在服务器端保留 .ejs
文件而不进行解析,可以按照以下步骤操作:
-
确保服务器不解析 .ejs 文件:确保你的服务器配置不会将
.ejs
文件当作模板引擎来处理。例如,在 Express 中,你可以通过修改路由或视图引擎设置来实现这一点。 -
客户端加载 EJS 模板:在客户端,你可以通过 AJAX 请求获取
.ejs
文件中的模板内容,然后在客户端渲染这些模板。
以下是一个简单的示例,展示如何在客户端加载并渲染 .ejs
文件中的模板:
示例代码
假设你的服务器上有一个名为 template.ejs
的文件,内容如下:
<!-- template.ejs -->
<script id="user-template" type="text/template">
<% if (names.length) { %>
<ul>
<% names.forEach(function(name){ %>
<li><%= name %></li>
<% }) %>
</ul>
<% } %>
</script>
客户端 JavaScript 代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>EJS Client Example</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/ejs/3.1.7/ejs.min.js"></script>
<script>
document.addEventListener('DOMContentLoaded', function() {
fetch('/path/to/template.ejs')
.then(response => response.text())
.then(template => {
var names = ['loki', 'tobi', 'jane'];
var renderedHtml = ejs.render(template, { names: names });
document.body.innerHTML = renderedHtml;
})
.catch(error => console.error('Error fetching the template:', error));
});
</script>
</head>
<body>
</body>
</html>
解释
-
服务器配置:确保你的服务器不会自动解析
.ejs
文件。例如,在 Express 中,你可以通过以下方式配置:app.set('views', './views'); app.set('view engine', 'ejs'); // 确保不要将特定路径映射到 EJS 渲染器 app.get('/path/to/template.ejs', (req, res) => { res.sendFile(__dirname + '/views/template.ejs'); });
-
客户端加载模板:使用
fetch
或其他 AJAX 方法从服务器获取.ejs
文件的内容。 -
渲染模板:使用 EJS 库在客户端渲染模板,并将结果插入到页面中。
这样,你就可以在客户端使用 EJS 模板,同时保持服务器端的 .ejs
文件不被解析。