成人视屏在线观看-国产99精品-国产精品1区2区-欧美一级在线观看-国产一区二区日韩-色九九九

您的位置:首頁技術文章
文章詳情頁

html5 - EventSource報錯

瀏覽:119日期:2023-09-08 10:09:00

問題描述

錯誤

Error: Can’t set headers after they are sent.

at ServerResponse.OutgoingMessage.setHeader (_http_outgoing.js:357:11)at ServerResponse.header (D:nodejavascript-demonode_modulesexpresslibresponse.js:730:10)at ServerResponse.send (D:nodejavascript-demonode_modulesexpresslibresponse.js:170:12)at Timeout.setInterval [as _onTimeout] (D:nodejavascript-demorouteseventsourceeventsource.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 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>

問題解答

回答1:

問題已解決,需要給發送的數據加上'data:'前綴,'nn'后綴,即'data'+msg+'nn'服務端代碼修改如下:

const express = require(’express’);const router = express.Router();router.get(’/connect’,function(req,resp,next){ resp.writeHead(200,{'Content-Type':'text/event-stream','Cache-Control':'no-cache','Connection':'keep-alive' }); setInterval(function(){ resp.write('data:'+Date.now()+'nn'); },1000);});router.get(’/html’,(req,resp,next)=>{ resp.render(’./eventsource/msgsend_recevie.html’);});module.exports=router;回答2:問題

在express的response已經send后,response不允許再進行header等一系列的操作,setintval是一個定時器,你的邏輯方式沒有正確。你的setintval第一次已經把響應推送出去了,那么后面這個響應已經不能繼續操作了,由于http是單向非雙向的,所以第二次是無效的操作

解決方案

如果你希望客戶端能夠接受服務端得事件推送的話,我推薦使用socketio,或者使用ajax輪訓去處理。

標簽: Html5
相關文章:
主站蜘蛛池模板: 国产成人三级 | 亚洲国产精品日韩在线观看 | 67194欧美成l人在线观看免费 | 精品一区二区三区高清免费不卡 | 国产高清视频免费观看 | 成人亚洲国产综合精品91 | 亚洲一区中文字幕在线 | 在线看片不卡 | 看v片| 国内交换一区二区三区 | 欧美专区在线视频 | 91精品国产高清久久久久 | 91成人免费版 | 国产农村乱子伦精品视频 | 成人国产网站 | 免费aa在线观看 男人的天堂 | 美女曰皮| 黄色毛片国产 | 精品72久久久久久久中文字幕 | 亚洲国产一区在线 | 久草视频手机在线观看 | 尤物蜜芽福利国产污在线观看 | 在线综合亚洲欧美自拍 | 猛操美女 | 性做久久久久久久免费看 | 成年人看的免费视频 | 欧美人成一本免费观看视频 | 91大神在线精品视频一区 | 日韩精品免费一区二区 | 国产一区二区三区在线免费观看 | 精品国产v无码大片在线观看 | 日本免费高清视频二区 | 亚洲精品久久久中文字 | 久久免费福利 | 成年人性网站 | 精品久久久日韩精品成人 | 可以免费看黄色的网站 | 一级成人毛片免费观看欧美 | 毛片啪啪视频 | 日韩欧美在线观看一区 | 国产萌白酱在线一区二区 |