错误
Ralat: Tidak dapat menetapkan pengepala selepas ia dihantar.
at ServerResponse.OutgoingMessage.setHeader (_http_outgoing.js:357:11)
at ServerResponse.header (D:\node\javascript-demo\node_modules\express\lib\response.js:730:10)
at ServerResponse.send (D:\node\javascript-demo\node_modules\express\lib\response.js:170:12)
at Timeout.setInterval [as _onTimeout] (D:\node\javascript-demo\routes\eventsource\eventsource.js:8:8)
at ontimeout (timers.js:384:18)
at tryOnTimeout (timers.js:244:5)
at Timer.listOnTimeout (timers.js:214:5) Program node --debug ./bin/www exited with code 1
const express = require('express');
const router = express.Router();
router.get('/connect',function(req,resp,next){
resp.append('Content-Type','text/event-stream');
console.log(req.method);
setInterval((data)=>{
resp.send('hello!');
},1000,'hello');
});
router.get('/html',(req,resp,next)=>{
resp.render('./eventsource/msgsend_recevie.html');
});module.exports=router;
<!DOCTYPE html>
<html lang="en">
<head>
<title>EventSource消息发送</title>
<style type="text/css">
*{
margin:0 auto;
padding:0;
}
p{
width:440px;
height:450px;
border:2px solid;
margin-top:100px;
}
</style>
</head>
<body>
<p>
<textarea id="msg_recevie" rows="30" cols="60"></textarea>
</p>
<script>
//使用eventsource发送信息
var eventSource = new EventSource('/msg_send/connect');
eventSource.onmessage=function(e){
var tx=document.getElementsByTagName('textarea')[0];
tx.value=e.data;
};
</script>
</body>
</html>
Masalah telah diselesaikan Anda perlu menambah awalan "data:" dan akhiran "nn" pada data yang dihantar, iaitu "data"+msg+"nn"
Kod pelayan diubah seperti berikut:
Soalan
Selepas respons ekspres dihantar, respons tidak dibenarkan melakukan beberapa operasi seperti pengepala Setintval ialah pemasa, dan kaedah logik anda tidak betul.
PenyelesaianSetinval anda telah menolak respons untuk kali pertama, jadi respons seterusnya tidak lagi boleh dikendalikan Memandangkan http adalah sehala tetapi bukan dua hala, kali kedua ialah operasi tidak sah