javascript - 如何从不同的 JS 文件访问 EJS 文件中的变量
问题描述
我正在构建一个简单的 Web 应用程序,它接受 3 种不同类型的输入并从视图目录(使用 Node 和 Express)呈现 3 个不同的 EJS 文件之一。每个呈现的 EJS 文件都需要静态数组的内容。静态数组很大,我想将它存储在一个单独的 JS 文件中。我尝试将此代码放入 EJS 文件中:
应用程序.js
var arrayFile = require('./arrayFile.js');
app.get("/", async function(req, res){
let blockVariable = await request({
method: "get",
uri: "https://testardor.jelurida.com/nxt?requestType=getBlocks",
json: true
});
var blocks2 = []
blockVariable.blocks.forEach(function(element){
if (element.transactions.length != 0){
blocks2.push(element);
}
});
res.render("home", {blocks: blockVariable.blocks,
blocks2: blocks2,
arrayFile: arrayFile
});
});
主页.ejs
<%= arrayFile %>
数组文件.js
array = [{thing1: 1}, {thing2: 2}]
这会在 home.ejs 页面上给出结果 [object Object]
我试着制作 home.ejs
<%= JSON.stringify(arrayFile) %>
结果{}
解决方案
我认为您正在混合上下文。<script src="arrayFile.js"></script>
将在浏览器端工作。虽然<%= array %>
在服务器端工作。所以它应该是这样的,只是为了给你一个想法:
// assuming that your array is exported as default
var array = require('./arrayFile.js');
app.get('/page', (req, res) => {
// make array available to EJS context
res.render('page_ejs', {array});
});
但这可能会产生一个HTML
带有印记的大数组。这可能不是您可能想要的,因为您实际上并不需要<script src="arrayFile.js"></script>
EJS。
如果您想将文件发送到浏览器,您的HTML
and arrayFile.js
,那么您必须正确导出数组,arrayFile.js
以便您可以编写如下内容:
// this will be fetched by browser
<script src="arrayFile.js"></script>
// and then executed by browser
<script>
console.log(yourArray);
</script>
然后你不需要<%= array %>
在你的 EJS 中。
当然,您可以混合使用这两种方式,使数组对 EJS 和浏览器可用。
推荐阅读
- php - 从包含的文件中包含 php
- python - 我可以在 PyMC3 中使用非线性多元数据吗?
- c# - 在对 App Center API 的请求中发布 JSON 的问题
- node.js - Mongoose.findOne 返回相同的文档
- java - 为什么我在将列表存储到类中时得到空数组,然后将每个类对象存储到数组中
- angular - 'Observable' 类型上不存在属性 'catch'
'.ts(2339) 添加 import 'rxjs/add/operator/catch' 无法解决错误; - mysql - 遵循模式的自定义日历
- python - 使用 Python 查询连接到 Windows 的 USB 设备
- excel - 如何对文件中的日期进行排序,以使链接文件中的数据保持链接到已排序的数据 Excel VBA
- java - 根据具有空条目的 String 属性对对象的“列表”进行排序