Files
ihaleist/server/request-lifetime.mjs

10 lines
478 B
JavaScript

/** Request completion is normal; premature response closure cancels dependent work. */
export function requestLifetime(req, res) {
const controller = new AbortController();
const abort = () => controller.abort();
const closed = () => {if (!res.writableFinished) abort();};
req.once('aborted',abort);res.once('close',closed);
if(req.aborted || res.destroyed) abort();
return {signal:controller.signal,dispose(){req.off('aborted',abort);res.off('close',closed);}};
}