首页 > 解决方案 > Node.js/ejs - 在带有循环的 ejs 文件中使用插值

问题描述

我在 ejs 文件中有一个内联(在 html/ejs 中)脚本,该文件是由节点构建的。

主页.ejs

<html>
  <head>

    <script>
      var i18nRotatingKws = [];
      for (var i=1; i<90; i++) { 
        var i18nRotatingKws[i] = "<%- `rotatingKws.rotatingKw${i}` %>";
      } 
    </script>
  </head>
</html>

编译 ejs 文件后的输出应该是:

<html>
  <head>

    <script>
      var i18nRotatingKws = [];          
      var i18nRotatingKws[1] = "<%- rotatingKws.rotatingKw1 %>";
      var i18nRotatingKws[2] = "<%- rotatingKws.rotatingKw2 %>";
      var i18nRotatingKws[3] = "<%- rotatingKws.rotatingKw3 %>";
      var i18nRotatingKws[4] = "<%- rotatingKws.rotatingKw4 %>";
     //and so on until 90
    </script>
  </head>
</html>

这些值,rotatingKws.rotatingKw1,rotatingKws.rotatingKw2...都在 i18n 文件中定义(取决于语言)。

我没有在 ejs 中使用任何循环,它工作得很好。这意味着如果我真的写了 90 行,例如var i18nRotatingKws[1] = "<%- rotatingKws.rotatingKw1%>";`构建工作并且我在网页上检查过,它也可以工作。

我有一个特殊的 node.js 脚本,它在 tje ejs 编译之前解析 ejs 文件以更改 i18n 文件中的值,如下所示:

i18n/locales.js

module.exports = {    
  rotatingKws: {
    rotatingKw1: __("rotatingKw1"),
    rotatingKw2: __("rotatingKw2"), 
    rotatingKw3: __("rotatingKw3"),
  },
}

语言环境/fr.js

module.exports = {  
  //rotatingKws
  "rotatingKw1":"nice keyword1",
  "rotatingKw2":"cool stuff",
  "rotatingKw3":"hip man",
}

循环是问题:构建失败,我收到以下错误:

i is not defined at eval

如何解决这个问题?

标签: javascriptnode.jsejs

解决方案


推荐阅读