1 回答
TA贡献1812条经验 获得超5个赞
问题就出在这一行:
const colsdata = cols1.map((element) => {
res.set('Content-Type', 'text/html');
res.render('portfolio', {
headlinePortfolio: element[0],
subheadlinePortfolio: element[1],
image1: element[3],
client: element[4],
campaign: element[5]
})
})
您不能渲染多次。Render调用res.send()方法将数据发送到前端。所以发生的事情是:您发送 (res.send()) 多次(因为 res.render 在地图内),因此出现错误。
为了防止渲染发送数据,您必须提供如下回调:
res.render('portfolio', {
headlinePortfolio: element[0],
subheadlinePortfolio: element[1],
image1: element[3],
client: element[4],
campaign: element[5]
}, ()=>console.log(`template created do something`))
当您准备好发送所有内容时,您将尝试一次性发送所有内容:res.send(data)
此外,您router.get必须异步才能等待关键字工作。
更多更新:
您已经更新了您的答案,因此这是我上面分享的所有内容的一种更愚蠢的方法。
您正在尝试创建一个模板,但问题是您正在创建多个模板,因为您正在循环内使用函数。您应该做的是将函数从循环中删除。
不幸的是,我无法准确地教授如何实现您想要实现的目标。我将重现一个最小输出,以便您可以从那里开始工作:
注意:为了简化,这里不存在的所有内容都应该保持不变。
/* GET portfolio page. */
router.get('/', async function (req, res, next) {
...
const cols1 = spreadvals1.data.values || [];
// I have removed the .map fn. You should do the same
res.set('Content-Type', 'text/html');
res.render('portfolio', {
headlinePortfolio: cols[0][0], //row 1 - elem (col) 1
subheadlinePortfolio:cols[0][1], //row 1 - elem (col) 2
image1: cols[0][3], //row 1 - elem (col) 4
client: cols[0][4],//row 1 - elem (col) 5
campaign: cols[0][5], // row 1 - elem (col) 6
})
}
});
module.exports = router;
对于上面的示例,您将不会出现错误,并且只会获得第一行。如果您想要下一行,则必须增加row[1]、row[2]、row[3]等等...如果您想要来自不同行的多个(分隔的)模板,您将必须深入挖掘并理解我所说的回调并用 map 来实现它。
添加回答
举报