typestack/routing-controllers

How to implement SSE

Closed this issue · 3 comments

This doesn't work!!

@Controller("/sse")
export class SseController {
  @Get("/stream_test1")
  async streamTest(@Res() res: Response) {
    res.setHeader("Content-Type", "text/event-stream");
    res.setHeader("Cache-Control", "no-cache");
    res.setHeader("Connection", "keep-alive");

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

    res.on("close", () => {
      console.log("close");
      clearInterval(interval);
      res.end();
    });
 
  }
}

Error :error Error
at new HttpError (/Users/mac/Desktop/workspace/express_ts_typeorm_demo/node_modules/src/http-error/HttpError.ts:16:18)
at new NotFoundError (/Users/mac/Desktop/workspace/express_ts_typeorm_demo/node_modules/src/http-error/NotFoundError.ts:10:5)
at ExpressDriver.handleSuccess (/Users/mac/Desktop/workspace/express_ts_typeorm_demo/node_modules/src/driver/express/ExpressDriver.ts:324:15)
at /Users/mac/Desktop/workspace/express_ts_typeorm_demo/node_modules/src/RoutingControllers.ts:167:35
at processTicksAndRejections (node:internal/process/task_queues:95:5) {
httpCode: 404
}
404
close

plz !

export function registerSseRoute(app: Express) {
  app.get("/sse/stream_test", (req, res) => {
    res.setHeader("Content-Type", "text/event-stream");
    res.setHeader("Cache-Control", "no-cache");
    res.setHeader("Connection", "keep-alive");

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

    res.on("close", () => {
      console.log("close");
      clearInterval(interval);
      res.end();
    });
  });
}

It is feasible for me to use native express, I just want to know how to use the controller

This issue has been automatically locked since there has not been any recent activity after it was closed. Please open a new issue for related bugs.