Skip to content

Commit d307427

Browse files
committed
app.ts: Fix createApp to log all http server errors
cc @code-asher
1 parent 8acb2ae commit d307427

File tree

3 files changed

+27
-14
lines changed

3 files changed

+27
-14
lines changed

src/common/util.ts

+8
Original file line numberDiff line numberDiff line change
@@ -112,3 +112,11 @@ export const getFirstString = (value: string | string[] | object | undefined): s
112112

113113
return typeof value === "string" ? value : undefined
114114
}
115+
116+
export function logError(prefix: string, err: any): void {
117+
if (err instanceof Error) {
118+
logger.error(`${prefix}: ${err.message} ${err.stack}`)
119+
} else {
120+
logger.error(`${prefix}: ${err}`)
121+
}
122+
}

src/node/app.ts

+16-2
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import express, { Express } from "express"
33
import { promises as fs } from "fs"
44
import http from "http"
55
import * as httpolyglot from "httpolyglot"
6+
import * as util from "../common/util"
67
import { DefaultedArgs } from "./cli"
78
import { handleUpgrade } from "./wsRouter"
89

@@ -22,8 +23,21 @@ export const createApp = async (args: DefaultedArgs): Promise<[Express, Express,
2223
)
2324
: http.createServer(app)
2425

25-
await new Promise<http.Server>(async (resolve, reject) => {
26-
server.on("error", reject)
26+
let resolved = false
27+
await new Promise<http.Server>(async (resolve2, reject) => {
28+
const resolve = () => {
29+
resolved = true
30+
resolve2()
31+
}
32+
server.on("error", (err) => {
33+
if (!resolved) {
34+
reject(err)
35+
} else {
36+
// Promise resolved earlier so this is an unrelated error.
37+
util.logError("http server error", err)
38+
}
39+
})
40+
2741
if (args.socket) {
2842
try {
2943
await fs.unlink(args.socket)

test/testutil.ts

+3-12
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import * as http from "http"
2-
import { logger } from "@coder/logger"
3-
import { ensureAddress } from "../src/node/app"
42
import * as nodeFetch from "node-fetch"
3+
import * as util from "../src/common/util"
4+
import { ensureAddress } from "../src/node/app"
55

66
export class HttpServer {
77
private hs = http.createServer()
@@ -25,7 +25,7 @@ export class HttpServer {
2525
rej(err)
2626
} else {
2727
// Promise resolved earlier so this is some other error.
28-
logError("server error", err)
28+
util.logError("http server error", err)
2929
}
3030
})
3131
})
@@ -54,12 +54,3 @@ export class HttpServer {
5454
return nodeFetch.default(`${ensureAddress(this.hs)}${requestPath}`, opts)
5555
}
5656
}
57-
58-
59-
export function logError(prefix: string, err: any): void {
60-
if (err instanceof Error) {
61-
logger.error(`${prefix}: ${err.message} ${err.stack}`)
62-
} else {
63-
logger.error(`${prefix}: ${err}`)
64-
}
65-
}

0 commit comments

Comments
 (0)