我能在EJS中渲染多个来源吗?

4

我正在尝试使用来自两个不同来源的数据,但是使用EJS、JS和Node在同一个HTML页面上呈现它们。

这就是我正在尝试的内容...

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

数据是JSON格式,data2是一个数组。我尝试寻找相关的语法来处理这个过程,但似乎找不到合适的内容。

非常感谢。

2个回答

4

一个请求只能渲染一次。

但是你可以将JSON和数组数据合并,然后进行字符串化。

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

或者将两个变量分配到一个对象中,并将其解析到渲染函数中。

var returnVals= JSON.stringify({data2: arrayData, data1: jsonData}); 

谢谢,这个方法很有效!现在我意识到我正在将数据推送到arrayData中,但是EJS在完成向arrayData推送数据之前就开始呈现页面了...你有什么想法可以修复它吗? - user6067064
我不确定你的意思是什么?你能否再提出一个关于这个问题的更详细的问题?另外,如果我的回答对你有帮助的话,你应该接受它 :) @TheGirl440 - James111
@James111: 你好,我发现了你的答案,我有这个问题 ,它已经有了答案,但我更新了一下,想知道如何在不同的文件中调用两个 res.render。如果你有解决方案,我当然会点赞。谢谢! - George
@james111 为什么我需要使用 JSON.stringify 而不是将整个东西解析为 json? - Cadell Teng

1
您不能在单个请求中多次渲染。
但如果您想显示不同类型的数据,比如:

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是一个模式。而results就像是:

[ { _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' } ]

所以,“results”和“fullname”是不同类型的JSON,您也可以发送它们。 最后,上面的解决方案也适用于相同类型的JSON文件。 谢谢。希望对您有所帮助。 :)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接