节点/表示将路由变量传递给javascript?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (65)

我试图传递一个传递给路线的对象,例如:

res.render('index', {myObj: myObj});

但是如果我想在索引页面中运行一个JS脚本,我如何在脚本中访问这个对象,我查了一下,发现我可以使用ejs将它放在脚本中,例如:

var obj = "<%= myObj %>"

但后来我不能将脚本放在一个单独的文件中,因为它依赖于ejs。

将此参数传递给我的JS的正确方法是什么,这样我也可以将我的脚本放在一个单独的脚本文件中?

提问于
用户回答回答于

在定义之后加载使用这些变量的脚本:

<!doctype html>
<html>

<head>
  <script>
    /** constants from Express **/
    let myObj = <%- JSON.stringify(myObj) %>;
    //'-' must be used here not '=' after <% for it to work)
    let someString = "<%= someString %>";
  </script>
</head>

<body>
    ...
<script src="scripts/someJS.js"></script>
</body>

</html>
用户回答回答于

我曾经做过类似的事情require.js. require.js将加载包含要运行的脚本的.js文件,并传递myObj into it.

server.js

res.render('index', {myObj: myObj});

index.ejs

// index.js is your separate .js file which is declared as entry point
<script data-main="index.js" src="<PATH_TO_REQUIRE_JS>"></script>
<script>
  requirejs.config({
    config: {
      // By default load any modules from this folder
      baseUrl: './js',
      // index must be used as name here in order to pass myObj into ./js/index.js
      "index": {
        "myObj": "<%= myObj %>"
      }
    }
  });
</script>

index.js

var myObj = module.config().myObj;

扫码关注云+社区

领取腾讯云代金券