节点/表达式将路由变量传递给javascript

时间:2018-08-12 11:12:59

标签: javascript node.js express

我正在尝试传递传递给路线的对象,例如:

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

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

var obj = "<%= myObj %>"

但是我不能将脚本放在单独的文件中,因为它取决于ejs。

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

谢谢

3 个答案:

答案 0 :(得分:0)

正如我在评论中指出的那样,我总是在HTML文档顶部定义要传递给客户端JS的值,如下所示,然后在定义之后加载使用这些变量的脚本: / p>

<!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>

scripts / someJS.js现在可以使用变量了。

答案 1 :(得分:0)

如果myObj是一个对象,假设是,则使用JSON.stringify()

<script>
    var myObj = <%- JSON.stringify(myObj) %>;
</script>

答案 2 :(得分:0)

我曾经使用require.js做过类似的事情。 require.js将加载包含要运行的脚本的.js文件,并将myObj传递到其中。


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;

  • <script data-main="../js/index.js"将单独的.js文件定义为模块。

  • requirejs.config()会将指定的密钥传递给声明它们的模块。

  • module.config().<SOME_KEY>;将为您提供每个模块的每个指定键的值。