![](/img/trans.png)
[英]Cannot set headers after they are sent to the client Error in node.js
[英]Node JS Error: (Cannot set headers after they are sent to the client)
我要在程序中執行的操作是,我想同時使用res.send
和render
進行相同的數據處理。 因為我有一個Qt應用程序,能夠從我的Node JS接收數據。 但是似乎無法同時發送和呈現網頁上的數據。
------SERVER.JS-------
app.use('/number',function(req, res){ // created an API which gets the MySQL data onto that certain web directory
db.query("SELECT * FROM qnumber",function(error,rows,fields){ //query the data with the function and its parameters
if(value <= rows.length){
value++;
const getNumber = rows[value].qNumberCount;
const displayNumber = rows[value].qNumberCount;
console.log('array: '+value +' = '+ getNumber);
res.render('index',{title: 'CIV Queueing System',getNumber});
return res.send(displayNumber);
}
else{
console.log('Error in Query!');
console.log(error); //display in the console the specific error
}
});
});
------INDEX.HANDLEBARS-------
<html>
<head>
<style>
body{background: burlywood;font-family: verdana;color: whitesmoke;padding: 30px;}
h1{font-size: 48px; text-transform: uppercase; letter-spacing: 2px; text-align: center; color: cornflowerblue;}
p{font-size: 16px;text-align: center;}
</style>
<h1>Queue Counts</h1><br>
</head>
<body class="text-center">
{{this.getNumber}}
</body>
<script src="/reload/reload.js"></script>
</html>
您不能為同一請求同時調用res.render()
和res.send()
。 選擇另一個,而不是兩個。 您只會為每個http請求發送一個響應。
您無需同時發送兩者即可說明要完成的任務。 如果您要發送HTML頁面,則可以將要傳遞給res.render()
的數據傳遞,並且所使用的模板將對該數據進行有用的處理,例如將其呈現為HTML或將其放入Javascript變量中。呈現的頁面,以便頁面中的腳本可以在客戶端訪問它。
如果您只是嘗試將單個值發送回作為響應(並且沒有HTML頁面),那么請擺脫res.render()
和res.send()
並使用res.json()
並傳遞一個Javascript對象,其中包含您的數據到res.json()
。
錯誤來自以下代碼
res.render('index',{title: 'CIV Queueing System',getNumber});
return res.send(displayNumber);
您正在向同一請求發送多個時間響應。
您只能發送一次響應請求。
您可以在端res.render()
傳遞變量displayNumber
res.render('index',{title:'CIV Queueing System',
getNumber:getNumber,
displayNumber:displayNumber
});
或者您可以使用res.locals
傳遞數據,例如:
res.locals.title='CIV Queueing System';
res.locals.getNumber=getNumber;
res.locals.displayNumber=displayNumber;
res.render('index');
並在視圖中使用它
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.