Skip to content

Commit bd09533

Browse files
author
Teffen
authored
Fix issue where 404 errors are mistaken for server errors. (#4534)
* Fix issue where 404 errors are mistaken for server errors. * Bump vendor.
1 parent db35c47 commit bd09533

File tree

3 files changed

+32
-10
lines changed

3 files changed

+32
-10
lines changed

src/node/routes/errors.ts

+29-7
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,36 @@ import { rootPath } from "../constants"
88
import { replaceTemplates } from "../http"
99
import { escapeHtml, getMediaMime } from "../util"
1010

11-
const notFoundCodes = ["ENOENT", "EISDIR"]
11+
interface ErrorWithStatusCode {
12+
statusCode: number
13+
}
14+
15+
interface ErrorWithCode {
16+
code: string
17+
}
18+
19+
/** Error is network related. */
20+
export const errorHasStatusCode = (error: any): error is ErrorWithStatusCode => {
21+
return error && "statusCode" in error
22+
}
23+
24+
/** Error originates from file system. */
25+
export const errorHasCode = (error: any): error is ErrorWithCode => {
26+
return error && "code" in error
27+
}
28+
29+
const notFoundCodes = [404, "ENOENT", "EISDIR"]
30+
1231
export const errorHandler: express.ErrorRequestHandler = async (err, req, res, next) => {
13-
if (notFoundCodes.includes(err.code)) {
14-
err.status = HttpCode.NotFound
32+
let statusCode = 500
33+
34+
if (errorHasStatusCode(err)) {
35+
statusCode = err.statusCode
36+
} else if (errorHasCode(err) && notFoundCodes.includes(err.code)) {
37+
statusCode = HttpCode.NotFound
1538
}
1639

17-
const status = err.status ?? err.statusCode ?? 500
18-
res.status(status)
40+
res.status(statusCode)
1941

2042
// Assume anything that explicitly accepts text/html is a user browsing a
2143
// page (as opposed to an xhr request). Don't use `req.accepts()` since
@@ -27,8 +49,8 @@ export const errorHandler: express.ErrorRequestHandler = async (err, req, res, n
2749
const content = await fs.readFile(resourcePath, "utf8")
2850
res.send(
2951
replaceTemplates(req, content)
30-
.replace(/{{ERROR_TITLE}}/g, status)
31-
.replace(/{{ERROR_HEADER}}/g, status)
52+
.replace(/{{ERROR_TITLE}}/g, statusCode.toString())
53+
.replace(/{{ERROR_HEADER}}/g, statusCode.toString())
3254
.replace(/{{ERROR_BODY}}/g, escapeHtml(err.message)),
3355
)
3456
} else {

vendor/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,6 @@
77
"postinstall": "./postinstall.sh"
88
},
99
"devDependencies": {
10-
"code-oss-dev": "cdr/vscode#8db6c9bb0bc065bdb905dc076f4d4234f126aff7"
10+
"code-oss-dev": "cdr/vscode#a1d3f915454bb88e508c269a3c5bafb3cfa6f9f6"
1111
}
1212
}

vendor/yarn.lock

+2-2
Original file line numberDiff line numberDiff line change
@@ -296,9 +296,9 @@ clone-response@^1.0.2:
296296
dependencies:
297297
mimic-response "^1.0.0"
298298

299-
code-oss-dev@cdr/vscode#8db6c9bb0bc065bdb905dc076f4d4234f126aff7:
299+
code-oss-dev@cdr/vscode#a1d3f915454bb88e508c269a3c5bafb3cfa6f9f6:
300300
version "1.61.1"
301-
resolved "https://codeload.github.com/cdr/vscode/tar.gz/8db6c9bb0bc065bdb905dc076f4d4234f126aff7"
301+
resolved "https://codeload.github.com/cdr/vscode/tar.gz/a1d3f915454bb88e508c269a3c5bafb3cfa6f9f6"
302302
dependencies:
303303
"@microsoft/applicationinsights-web" "^2.6.4"
304304
"@vscode/sqlite3" "4.0.12"

0 commit comments

Comments
 (0)