错误
错误:发送后无法设置标头。
问题已解决,需要给发送的数据加上"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()+"\n\n"); },1000); }); router.get('/html',(req,resp,next)=>{ resp.render('./eventsource/msgsend_recevie.html'); }); module.exports=router;
在express的response已经send后,response不允许再进行header等一系列的操作,setintval是一个定时器,你的逻辑方式没有正确。你的setintval第一次已经把响应推送出去了,那么后面这个响应已经不能继续操作了,由于http是单向非双向的,所以第二次是无效的操作
如果你希望客户端能够接受服务端得事件推送的话,我推荐使用socketio,或者使用ajax轮训去处理。
问题已解决,需要给发送的数据加上"data:"前缀,"nn"后缀,即"data"+msg+"nn"
服务端代码修改如下:
问题
在express的response已经send后,response不允许再进行header等一系列的操作,setintval是一个定时器,你的逻辑方式没有正确。
你的setintval第一次已经把响应推送出去了,那么后面这个响应已经不能继续操作了,由于http是单向非双向的,所以第二次是无效的操作
解决方案
如果你希望客户端能够接受服务端得事件推送的话,我推荐使用socketio,或者使用ajax轮训去处理。