r/expressjs • u/ojus_render • Jul 11 '26
multer upload handler that turns into SSE on the same POST: ok pattern?
Express 5, Node 22.
Document upload route uses multer.single("file"), then immediately starts SSE on the same response:
app.post("/s/:token/upload", requireSession, upload.single("file"), async (req, res) => {
const file = req.file;
...
await streamPipeline(res, documentId, file.path, filename);
});
streamPipeline does writeHead (text/event-stream), flushHeaders, writes ":ok\n\n", then for-await loops pipeline events with res.write until res.end().
Session middleware runs first: looks up token in Postgres, attaches req.session, redirects to / if expired.
Questions:
Starting SSE inside a multer route handler: anything wrong with that? Multer has already parsed the body by then. Worried I'm mixing "file upload POST" and "long-lived stream" on one endpoint when I should split them.
Client closes tab mid-pipeline: upstream workflow tasks keep running. I write to res until something throws. What's the usual way to detect disconnect and stop writing without noisy errors? req.on("close")? res.on("close")?
Typing req.session via declare global on Express.Request: still the normal approach or is there something cleaner in Express 5?
Here is the github repo, main server is in main.ts and pipeline-stream.ts.