javascript - 在外部 Javascript 文件中使用传递的变量
问题描述
我像这样将两个变量传递给我的前端
res.render("mypage", {data: data});
使用变量中的数据,我想构建一些 HTML 元素并使用图表进行一些数据可视化。我当然可以只使用我的模板软件 (EJS) 并在 HTML 文件本身中编写大量 javascript,但这听起来并不明智。
我搜索了stackoverflow,一般的解决方案似乎是将它放入一个全局变量中,然后加载到外部js文件中以便它可以访问它,所以在我的前端我会有这个
<head>
<title>Cool Site</title>
<script>
var data = <%- data %>;
</script>
<script src="/fun.js"></script>
</head>
问题是 VSCode 本身说Expression Expected
的是我的<%-
和%>
部分,当我尝试访问我的fun.js
文件中的变量时,它说Data is not defined
并且还说SyntaxError: Unexpected token
.
关于如何正确访问数据的任何想法?
解决方案
EJS 只是一种模板语言。它吐出文字。它将解释以下内容:
<script>
var data = <%- data %>;
</script>
...有点像:
`<script>
var data = ${data};
</script>`
那么是什么<%- data %>
意思呢?这意味着获取表达式的原始值并将其输出到结果中。因为data
它是一个对象,所以它很可能会调用toString
它,.toString()
对于一个对象来说,默认情况下是字符串[Object object]
,这使得你的 JavaScript 如下,它有一个语法错误:
<script>
var data = [Object object];
</script>
您最简单的解决方法是将您的数据序列化为JSON,这在 JavaScript 中可解释为对象文字:
<script>
var data = <%- JSON.stringify(data) %>;
</script>
...尽管您必须小心边缘条件,例如您的数据可能包含</script>
字符串的位置,在这种情况下,它会过早关闭您的脚本标签。幸运的是,有许多软件包可以提供更安全的 JSON 字符串版本,以便在 HTML 页面上输出。如果您的数据可以包含任意用户字符串,请使用更安全的字符串化库;否则你有一个脚本注入漏洞。
推荐阅读
- graph - 图表组合每列和每行的标签
- python - 有什么方法可以计算 Dataframe.groupby 前五列的 mean() 吗?
- python - 具有默认值的 dict.get 的可读性
- android-asynctask - Android从ProgressDialog切换到ProgressBar,有很多活动的最佳实现?
- clojure - wrap-cors 中间件不适用于 system.components
- java - 索引越界 Java
- python - 仅在 pandas groupby 中包含前 N 次出现的辅助列
- azure-active-directory - 如何使用 Azure AD 仅对具有不同子域但域与其他网站相同的网站之一实施 SSO?
- wordpress - WordPress:在我的搜索结果中的某些搜索页面上找不到带有 Relevanssi 的页面
- amazon-s3 - 如何忽略错误但不跳过 redshift 复制命令中的行