Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/470.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从不同的JS文件访问EJS文件中的变量_Javascript_Node.js_Express - Fatal编程技术网

Javascript 如何从不同的JS文件访问EJS文件中的变量

Javascript 如何从不同的JS文件访问EJS文件中的变量,javascript,node.js,express,Javascript,Node.js,Express,我正在构建一个简单的web应用程序,它接受3种不同类型的输入,并从视图目录(使用Node和Express)呈现3个不同EJS文件中的一个。每个呈现的EJS文件都需要静态数组的内容。静态数组很大,我想将其存储在一个单独的JS文件中。我尝试将此代码放入EJS文件中: app.js var arrayFile = require('./arrayFile.js'); app.get("/", async function(req, res){ let blockVariable = awai

我正在构建一个简单的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 %>
这将在home.ejs页面上显示结果[object]

我试着回家

<%= JSON.stringify(arrayFile) %>


对于结果{}

我认为你在混合上下文<代码>将在浏览器端工作。而
在服务器端工作。所以它应该是这样的,只是给你一个想法:

// 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中使用

如果要将文件发送到浏览器、您的
HTML
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>
//这将由浏览器获取
//然后由浏览器执行
log(数组);
那么您就不需要在EJS中使用


当然,您可以混合使用这两种方法,使数组既可供EJB使用,也可供浏览器使用。

您需要显示
arrayFile.js
的内容,可能会忽略数组内容,留下一些对象供演示。还有您的模板和快捷路线。
// this will be fetched by browser
<script src="arrayFile.js"></script>
// and then executed by browser
<script>
  console.log(yourArray);
</script>