Nodejs 外部JS文件 EJS变量
Nodejs 外部JS文件 EJS变量
外部JS文件无法访问EJS中传过来的变量,有什么办法可以解决么?
Node.js 外部JS文件 EJS变量
在使用Node.js和EJS模板引擎时,有时会遇到一个问题:如何在外部JavaScript文件中访问通过EJS传递的变量。这通常是因为外部JavaScript文件与EJS模板之间存在隔离,导致外部JavaScript无法直接访问EJS中的变量。
解决方案
解决这个问题的一种方法是将需要使用的变量以某种方式嵌入到HTML页面中,然后在外部JavaScript文件中通过DOM操作来获取这些变量。以下是具体步骤:
-
在EJS模板中嵌入变量
在EJS模板中,你可以将变量嵌入到HTML标签中,比如
<script>
标签内,或者作为数据属性添加到HTML元素上。<script> window.myVariable = '<%- myVar %>'; </script>
或者:
<div id="myData" data-my-var="<%- myVar %>"></div>
-
在外部JavaScript文件中读取变量
-
如果你选择将变量直接嵌入到
<script>
标签中,那么可以直接通过全局变量访问它:// external.js console.log(window.myVariable); // 输出 EJS 中传递的变量值
-
如果你选择将变量作为数据属性添加到HTML元素上,可以通过DOM操作获取:
// external.js const myDataElement = document.getElementById('myData'); const myVar = myDataElement.getAttribute('data-my-var'); console.log(myVar); // 输出 EJS 中传递的变量值
-
示例代码
假设我们有一个简单的EJS模板文件 index.ejs
和一个外部JavaScript文件 external.js
。
index.ejs
<!DOCTYPE html>
<html>
<head>
<title>EJS and External JS</title>
</head>
<body>
<h1>Welcome to the EJS Example!</h1>
<p><%- message %></p>
<!-- 嵌入EJS变量 -->
<script>
window.message = '<%- message %>';
</script>
<!-- 引入外部JS文件 -->
<script src="/public/js/external.js"></script>
</body>
</html>
external.js
console.log(window.message); // 输出 EJS 中传递的变量值
在这个例子中,message
是一个从Node.js服务器传递给EJS模板的变量。通过将该变量嵌入到 <script>
标签中,我们在外部JavaScript文件中成功访问了这个变量。
这种方法简单且有效,能够帮助你在外部JavaScript文件中访问EJS传递的变量。
you can use a function callback , very easy.
签名: 交流群244728015 《Node.js 服务器框架开发实战》 http://url.cn/Pn07N3
能说得具体点么~?那个函数的定义要放在哪里?
在使用 Node.js 和 EJS 模板引擎时,有时候会遇到从 EJS 文件传递给模板的变量不能直接在外部的 JavaScript 文件中访问的问题。这是因为外部的 JavaScript 文件是在客户端加载的,而 EJS 变量是在服务器端渲染模板时处理的。不过,有一些方法可以解决这个问题。
方法一:将变量直接嵌入到 HTML 中
最简单的方法是将需要使用的变量直接嵌入到 HTML 页面中,这样在外部的 JavaScript 文件中就可以通过 DOM 操作获取这些变量。
示例代码:
index.ejs:
<!DOCTYPE html>
<html>
<head>
<title>Example Page</title>
</head>
<body>
<script type="text/javascript">
var myVariable = "<%= someVariable %>";
</script>
<script src="/path/to/your/external-script.js"></script>
</body>
</html>
external-script.js:
console.log(myVariable); // 输出从 EJS 中传递的变量
Node.js (server-side):
const express = require('express');
const app = express();
const ejs = require('ejs');
app.get('/', (req, res) => {
const someVariable = "Hello from EJS!";
res.render('index', { someVariable });
});
app.listen(3000, () => console.log('Server running on port 3000'));
这种方法虽然简单,但可能会导致页面中出现大量的 JavaScript 代码,从而影响页面的可读性和维护性。
方法二:通过 AJAX 请求获取数据
另一种方法是使用 AJAX 请求从服务器获取需要的数据,然后在 JavaScript 文件中处理这些数据。
示例代码:
index.ejs:
<!DOCTYPE html>
<html>
<head>
<title>Example Page</title>
</head>
<body>
<script src="/path/to/your/external-script.js"></script>
</body>
</html>
external-script.js:
fetch('/data')
.then(response => response.json())
.then(data => {
console.log(data.someVariable); // 输出从服务器获取的数据
});
Node.js (server-side):
const express = require('express');
const app = express();
app.get('/data', (req, res) => {
res.json({ someVariable: "Hello from server" });
});
app.get('/', (req, res) => {
res.render('index');
});
app.listen(3000, () => console.log('Server running on port 3000'));
这种方法的优点是可以保持 HTML 和 JavaScript 的分离,并且更加灵活,适用于需要动态更新数据的情况。