diff --git a/src/node/proxy.ts b/src/node/proxy.ts index c03d3d5d4..afa964ae5 100644 --- a/src/node/proxy.ts +++ b/src/node/proxy.ts @@ -3,9 +3,19 @@ import { HttpCode } from "../common/http" export const proxy = proxyServer.createProxyServer({}) +// The error handler catches when the proxy fails to connect (for example when +// there is nothing running on the target port). proxy.on("error", (error, _, res) => { - res.writeHead(HttpCode.ServerError) - res.end(error.message) + // This could be for either a web socket or a regular request. Despite what + // the types say, writeHead() will not exist on web socket requests (nor will + // status() from Express). But writing out the code manually does not work + // for regular requests thus the branching behavior. + if (typeof res.writeHead !== "undefined") { + res.writeHead(HttpCode.ServerError) + res.end(error.message) + } else { + res.end(`HTTP/1.1 ${HttpCode.ServerError} ${error.message}\r\n\r\n`) + } }) // Intercept the response to rewrite absolute redirects against the base path.