You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Next.js客户端无法接收Express.js服务器的Server-Sent Events问题求助

Next.js客户端无法接收Express.js服务器的Server-Sent Events问题求助

大家好,我现在碰到一个SSE相关的棘手问题,想请各位帮忙看看。我搭了一个Next.js(React)客户端,用来接收Node.js/Express.js服务器推送的Server-Sent Events,但不知道为啥就是收不到消息。

目前EventSource的open和error事件都能正常触发,连接成功和出错的日志都能正常打印,但.onmessage方法完全检测不到任何消息,这可把我愁坏了😥。

下面是我的服务器和客户端代码,麻烦各位帮我排查下哪里写错了:

Express.js 服务器代码

router.get('/stream/:walletAddress', async (req, res, next) => {
  try {
    res.set({
      Connection: 'keep-alive',
      'Content-Type': 'text/event-stream',
      'Cache-Control': 'no-cache',
      'Access-Control-Allow-Origin': '*'
    });

    res.flushHeaders();

    let x = 0;
    const id = setInterval(() => {
      res.write(`event: message\n`);
      res.write(`data: ${x++}\n\n`);
    }, 2000);

    res.on('close', () => {
      console.log('Client closed.');
      clearInterval(id);
    });
  } catch (err) {
    next(err);
  }
});

Next.js(React)客户端代码

import { API_URL } from 'config';
import { useWalletStore } from 'src/stores';

export const FetchTxsProvider = ({ children }) => {
  const safeSdkReader = useWalletStore(state => state.safeSdkReader);

  useEffect(() => {
    const eventSource = new EventSource(
      `${API_URL}/transactions/stream/${safeSdkReader.getAddress()}`
    );

    eventSource.onopen = function (e) {
      console.log('Successfully connected.');
    };

    eventSource.onerror = function (err) {
      console.error(err);
      eventSource.close();
    };

    // ! Should fire here but doesn't!
    eventSource.onmessage = function (event) {
      console.log('Event: ', event);
    };

    return () => {
      console.log('Connection closed.');
      eventSource.close();
    };
  }, [safeSdkReader]);

  return <>{children}</>;
};

到底哪里出问题了呢?期待大家的解答!

备注:内容来源于stack exchange,提问作者Adrian D.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 13:34:29