Can I render multiple sources in EJS
Asked Answered
A

2

4

I am attempting to use data from 2 different sources, but render them on the same HTML page using EJS, JS and node. This is what I am trying..

app.set('view engine', 'ejs');
app.get('/', function(req, res) {
  res.render('index.ejs', { data: JSONdata })
  res.render('index.ejs', {data2: arrayData})
});

data is a JSON, data2 is an array. I have attempted to look up proper syntax for this exact process but cant seem to find anything.

Many thanks.

Annalisaannalise answered 17/5, 2016 at 22:39 Comment(0)
D
4

You cannot render more than once to a single request.

But you could simply combine your JSON and array data and stringify it.

App.set('view engine', 'ejs');
app.get('/', function(req, res) {
  res.render('index.ejs', JSON.stringify({data2: arrayData, data1: JSONdata}))
});

Or simply assign both variables into a single object and parse it to the render function

var returnVals= JSON.stringify({data2: arrayData, data1: jsonData}); 
Dark answered 17/5, 2016 at 23:1 Comment(4)
Thank you, this worked! Now I realize that I am pushing data to arrayData, but EJS is rendering the page before it finishes pushing my data to arrayData...thoughts on how I could potentially fix this.Annalisaannalise
I'm not sure what you mean? Could you post another question regarding this issue with a little more detail? Also if this answer helped you, you should accept it :) @TheGirl440Dark
@James111:Hello , I found your answer and I have this question which is already answered but I updated and I want to find out how can I call two res.render in different files.If you have a solution , I will upvote of course.Thanks!Miranda
@james111 why do I need to JSON.stringify it instead of parsing the entire thing as a json?Pasquale
R
1

You cannot render more than once to a single request.

But if you want to show different types of data like:

SSCResult.find({username:username},function (err, results) {
  var username=req.user.username;
  var fullname =req.user.firstname+' '+req.user.lastname;
  if (err) return console.error(err);

  console.log(results);

  res.render('sscandhsc',{fullname:fullname,results});
  
});

SSCResult is a Schema. and results is like

[ { _id: 59f61fe2fec3cc7bf804f95e,
    examtype: 'HSC',
    username: '1',
    __v: 0,
    gpa: '5.00',
    institution: 'New Govt. Degree College, Rajshahi',
    passedyear: '2013',
    board: 'Rajshahi' },
  { _id: 59f6408efec3cc7bf804fc78,
    examtype: 'SSC',
    username: '1',
    __v: 0,

    gpa: '5.00',
    institution: 'Taragunia High School',
    passedyear: '2011',
    board: 'Jessore' },
  { _id: 59f656a9fec3cc7bf8050146,
    examtype: 'JSC',
    username: '1',
    __v: 0,
    gpa: '5.00',
    institution: 'Taragunia High School',
    passedyear: '2008',
    board: 'Jessore' } ]

so "results" and fullname is different types of json and you also can send it.

Lastly the upper(1) solution is also right form same type json file. Thank you. Hope it will help you. :)

Return answered 29/10, 2017 at 23:1 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.