mirror of
https://github.com/fosrl/pangolin.git
synced 2026-01-29 06:10:47 +00:00
38 lines
1.1 KiB
TypeScript
38 lines
1.1 KiB
TypeScript
import { Request, Response, NextFunction } from "express";
|
|
import logger from "@server/logger";
|
|
import createHttpError from "http-errors";
|
|
import HttpCode from "@server/types/HttpCode";
|
|
|
|
export function requestTimeoutMiddleware(timeoutMs: number = 30000) {
|
|
return (req: Request, res: Response, next: NextFunction) => {
|
|
// Set a timeout for the request
|
|
const timeout = setTimeout(() => {
|
|
if (!res.headersSent) {
|
|
logger.error(
|
|
`Request timeout: ${req.method} ${req.url} from ${req.ip}`
|
|
);
|
|
return next(
|
|
createHttpError(
|
|
HttpCode.REQUEST_TIMEOUT,
|
|
"Request timeout - operation took too long to complete"
|
|
)
|
|
);
|
|
}
|
|
}, timeoutMs);
|
|
|
|
// Clear timeout when response finishes
|
|
res.on("finish", () => {
|
|
clearTimeout(timeout);
|
|
});
|
|
|
|
// Clear timeout when response closes
|
|
res.on("close", () => {
|
|
clearTimeout(timeout);
|
|
});
|
|
|
|
next();
|
|
};
|
|
}
|
|
|
|
export default requestTimeoutMiddleware;
|