не может передать данные из экспресс в ejs? - PullRequest
0 голосов
/ 08 марта 2019

Я пытался передать данные из файла js (sample.js) в ejs, используя res.send("filename.ejs",data), преобразовав объект в JSON, где данные JSON отображаются на консоли, но при попытке передать их, показывая ошибку

TypeError: Невозможно создать свойство '_locals' для строки

Может кто-нибудь помочь с этим и сказать мне, как вызвать их в файле ejs

Ответы [ 3 ]

0 голосов
/ 08 марта 2019

Вы отправляете данные в ваше представление, поэтому обновите свой код с этим и попробуйте

   res.render("filename",{
                        data:"hello"
                      });

Или вы можете передать целые данные

 res.render("filename",{data:data});

И в вашем файле ejs получить доступ к нимкак это

 <div> <%= data %> <div>
0 голосов
/ 09 марта 2019

Обратите внимание, что вы должны , а не использовать расширение .ejs в res.render, несмотря на другие ответы на ваш вопрос, предлагающие это сделать.
Когда вы вызываете res.render('myView'), ejs ищет шаблон с именем myView.ejs в папке с именем views (которая установлена ​​в качестве папки по умолчанию для использования ejs)

например:

res.render('myView.ejs',{
  data:data,
  foo:'foo'
});

ejs будет искать представление с именем myView.ejs.ejs (или оно может вообще потерпеть неудачу).

Чтобы получить доступ к данным в вашем шаблоне, вы должны сделать следующее:

app.js:

app.get('/somePathHere', function(req, res) {
  res.render('myView',{
    data:data,
    foo:'foo'
  });
});

myView.ejs:

<% data.forEach(function(item) { %>
    //do something

<% }); %>

<%= foo %>

Обратите внимание , что при доступе к переменной вы используете <%= varNameHere %>, а при написании любого типа функции вы пропустите =.

0 голосов
/ 08 марта 2019

res.send () используется для отправки данных, нет необходимости указывать файл ejs

res.send принимает массив в качестве параметра (res.send ([body])), и вы можете получить его в виде ejs, например {{data}}

например

NODEJS res.send ({сообщение: 'привет'})

filename.ejs

<div>{{ message }}</div> or <%= JSON.stringify(message)  %>

также, поскольку Express 5x не поддерживает res.send() метод, который вы можете использовать

res.status(200).send({message: 'hello})

(вы не признали свою экспресс-версию)

...