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 來實現它。
添加回答
舉報