簡體   English   中英

節點JS錯誤:(將標頭發送到客戶端后無法設置標頭)

[英]Node JS Error: (Cannot set headers after they are sent to the client)

我要在程序中執行的操作是,我想同時使用res.sendrender進行相同的數據處理。 因為我有一個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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM