如何在外部脚本中访问 ejs 变量

How can I access ejs variables in an external script

当我使用 NodeJS 将变量传递到我的 html 页面时,我可以使用内联脚本访问它,如下所示:

// passing myVar from the server
router.get('/', (req, res) => {
  res.render('index', { myVar: 'test'});
});

// access in index.ejs
<script>
  let myVar = <%- JSON.stringify(myVar) %>;
  alert(myVar);
</script>

如果我在这里尝试使用外部脚本而不是内联脚本,我会在使用 ejs 语法时遇到错误 <%- %>。如何在外部脚本中访问 myVar?

<%-%> 之间的代码是 服务器端代码

如果您将其从 EJS 模板文件中移出并移至静态 JS 文件中,那么您无法 获取数据。它不会被替换,您会将 EJS 模板发送到浏览器,而不是在服务器上处理它以生成文档。

如果您将它从生成 HTML 的 EJS 模板文件中移出并移到另一个生成 JavaScript 的 EJS 模板文件中,那么它将正常工作(除了它会有不同的URL 在您的服务器端代码中有不同的端点,因此您需要移动填充您尝试访问的变量的服务器端代码。

你有两个合理的选择:

有两个脚本元素。

一个获取页面的数据:

<script>let myVar = <%- JSON.stringify(myVar) %>;</script>

还有一个包含 JavaScript 逻辑:

<script src="/js/logic.js"></script>

将生成的数据移动到页面中

<div data-myVar="<%- JSON.stringify(myVar).replace(/"/g, "&quot;"); %>">...</div>

…然后通过DOM.

访问

您可以将您的变量放入数据值中以使用 js 或 jquery 在脚本中获取,例如:

查看 ejs 端:

<div class='test' data-test-value='<%= JSON.stringify(myVar) %'></div>

js 脚本端:

-如果你使用jquery:

var $test = $('.test').attr('data-test-value')
  alert($test);

-如果你使用 vanillaJs :

    var test = document.getElementsByClassName('test');
    var testValue = test[0].dataset.testValue;
    alert(testValue)

如果语法错误,我不会参考文档测试我的普通脚本