簡體   English   中英

如何從express.js發送“文本/事件流”數據?

[英]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

單個事件中的其他類型的數據可以是typeidretry

任何不以開頭的行

data:
type:
id:
retry:

忽略 ,因此為什么沒有發生任何事件

簡單的改變

setInterval(() =>
{
    res.write('data: ' + new Date().toISOString() + '\n\n');
}, 1000);

雖然,我會這樣寫

    setInterval(() => res.write(`data: ${new Date().toISOString()}\n\n`), 1000);

進一步閱讀MDN文檔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM