亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術(shù)文章
文章詳情頁

html5 - EventSource報(bào)錯(cuò)

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

問題描述

錯(cuò)誤

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消息發(fā)送</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發(fā)送信息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:

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

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:?jiǎn)栴}

在express的response已經(jīng)send后,response不允許再進(jìn)行header等一系列的操作,setintval是一個(gè)定時(shí)器,你的邏輯方式?jīng)]有正確。你的setintval第一次已經(jīng)把響應(yīng)推送出去了,那么后面這個(gè)響應(yīng)已經(jīng)不能繼續(xù)操作了,由于http是單向非雙向的,所以第二次是無效的操作

解決方案

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

標(biāo)簽: Html5
相關(guān)文章:
主站蜘蛛池模板: 免费的污网站 | 免费 视频 1级 | 亚洲欧美久久一区二区 | 亚洲男人的天堂网站 | 五月一区二区久久综合天堂 | 永久在线观看www免费视频 | 欧美一区二区三区日韩免费播 | 一级毛片视频 | 成人黄18免费视频 | 国产综合久久久久久 | 亚洲色图男人天堂 | 免费一区二区三区四区五区 | 免费的黄视频 | 亚洲色图 在线视频 | 欧美色欧美亚洲高清在线观看 | 一级香蕉免费毛片 | xxxxbbbb性猛hd高清| 欧美日韩黄色大片 | 国产成人91| 久久草在线视频 | 91视频会员 | 日韩高清在线 | 日韩二三区 | 国产床戏做爰免费观看网站 | 亚洲黄色一级毛片 | 特黄aaaaaa久久片 | 日韩欧美特一级大黄作a毛片免费 | 日韩在线视频观看 | 亚洲视频一区在线观看 | 久久se精品一区二区影院 | 三级aa | 国产欧美亚洲精品第一页青草 | 亚洲视频欧美 | 精品福利视频在线观看视频 | 日本老年人精品久久中文字幕 | 成人午夜兔费观看网站 | 天天草夜夜骑 | 日韩欧美三级在线 | 91在线视频免费播放 | 日本免费一区二区在线观看 | 亚洲午夜精品在线 |