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.
相关产品推荐
相关产品推荐

