Как получить доступ к переменной в файле EJS из другого файла JS - PullRequest
0 голосов
/ 16 декабря 2018

Я создаю простое веб-приложение, которое принимает 3 различных типа входных данных и отображает один из 3 различных EJS-файлов из каталога представлений (используя Node и Express).Каждый из визуализированных файлов 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}]

Это дает результаты [объект Object] на странице home.ejs

Я попытался создать home.ejs

<%= JSON.stringify(arrayFile) %>

с результатами {}

1 Ответ

0 голосов
/ 16 декабря 2018

Я думаю, что вы смешиваете контексты.<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 и 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, так и для браузера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...