我正在尝试传递传递给路线的对象,例如:
res.render('index', {myObj: myObj});
但是如果我想在索引页面中运行JS脚本,该如何在脚本中访问该对象,我就查找了它,发现可以使用ejs将其放入脚本中,例如:
var obj = "<%= myObj %>"
但是我不能将脚本放在单独的文件中,因为它取决于ejs。
将这个参数传递给我的JS的正确方法是什么,这样我也可以将我的脚本放在单独的脚本文件中??
谢谢
答案 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
传递到其中。
res.render('index', {myObj: myObj});
// 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>
var myObj = module.config().myObj;
<script data-main="../js/index.js"
将单独的.js文件定义为模块。
requirejs.config()
会将指定的密钥传递给声明它们的模块。
module.config().<SOME_KEY>;
将为您提供每个模块的每个指定键的值。