如何从 express.js 发送 'text/event-stream' 数据?
How to send 'text/event-stream' data from express.js?
尝试在服务器端使用 express.js 获取基本的服务器发送事件:
index.js
:
const app = require('express')();
const index_html = require('path').join(__dirname, 'index.html');
app.get('/', (req, res) =>
{
res.sendFile(index_html);
});
app.get('/data', (req, res) =>
{
res.header('Cache-Control', 'no-cache');
res.header('Content-Type', 'text/event-stream');
setInterval(() =>
{
res.write(new Date().toISOString() + '\n\n');
}, 1000);
});
app.listen('7000');
index.html
:
<!doctype html>
<head>
<title>Hello World</title>
</head>
<body>
<h1 id='result'>No Data Yet</h1>
<script>
var source = new EventSource('data');
source.onmessage = function(event)
{
console.log('invoked');
document.getElementById('result').innerHTML = event.data + '<br>';
};
</script>
</body>
source.onmessage
永远不会触发。
服务器端事件需要以特定的(文本)格式发送数据,具体来说,要发送数据,您需要格式为
的一行文本
data: text to send goes here
单个事件中的其他类型数据可以是type
、id
和retry
任何不以
开头的行
data:
type:
id:
retry:
被忽略,因此您没有收到任何事件
简单的改变
setInterval(() =>
{
res.write('data: ' + new Date().toISOString() + '\n\n');
}, 1000);
不过,我会这样写
setInterval(() => res.write(`data: ${new Date().toISOString()}\n\n`), 1000);
Further reading MDN documentation
尝试在服务器端使用 express.js 获取基本的服务器发送事件:
index.js
:
const app = require('express')();
const index_html = require('path').join(__dirname, 'index.html');
app.get('/', (req, res) =>
{
res.sendFile(index_html);
});
app.get('/data', (req, res) =>
{
res.header('Cache-Control', 'no-cache');
res.header('Content-Type', 'text/event-stream');
setInterval(() =>
{
res.write(new Date().toISOString() + '\n\n');
}, 1000);
});
app.listen('7000');
index.html
:
<!doctype html>
<head>
<title>Hello World</title>
</head>
<body>
<h1 id='result'>No Data Yet</h1>
<script>
var source = new EventSource('data');
source.onmessage = function(event)
{
console.log('invoked');
document.getElementById('result').innerHTML = event.data + '<br>';
};
</script>
</body>
source.onmessage
永远不会触发。
服务器端事件需要以特定的(文本)格式发送数据,具体来说,要发送数据,您需要格式为
的一行文本data: text to send goes here
单个事件中的其他类型数据可以是type
、id
和retry
任何不以
开头的行data:
type:
id:
retry:
被忽略,因此您没有收到任何事件
简单的改变
setInterval(() =>
{
res.write('data: ' + new Date().toISOString() + '\n\n');
}, 1000);
不过,我会这样写
setInterval(() => res.write(`data: ${new Date().toISOString()}\n\n`), 1000);
Further reading MDN documentation