我正在构建一个简单的Web应用程序,该应用程序将接受3种不同类型的输入,并从视图目录(使用Node和Express)呈现3种不同的EJS文件之一。每个呈现的EJS文件都需要一个静态数组的内容。静态数组很大,我想将其存储在单独的JS文件中。我尝试将这段代码放在EJS文件中:
app.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
});
});
home.ejs
<%= arrayFile %>
arrayFile.js
array = [{thing1: 1}, {thing2: 2}]
这会在home.ejs页面上显示结果[object Object]
我尝试制作home.ejs
<%= JSON.stringify(arrayFile) %>
有结果{}
答案 0 :(得分:0)
我认为您正在混合上下文。 <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
。这可能不是您想要的,因为这样实际上就不需要EJS中的<script src="arrayFile.js"></script>
。
如果要将文件HTML
和arrayFile.js
传送到浏览器,则必须正确导出arrayFile.js
中的数组,以便您可以编写如下内容:< / p>
// this will be fetched by browser
<script src="arrayFile.js"></script>
// and then executed by browser
<script>
console.log(yourArray);
</script>
然后,您的EJS中就不需要<%= array %>
。
当然,您可以混合使用两种方式,使数组既可用于EJS,也可用于浏览器。