Skip to content

Commit 1a80bd9

Browse files
committed
feat: createError
1 parent 9bbee01 commit 1a80bd9

2 files changed

Lines changed: 20 additions & 10 deletions

File tree

src/app.ts

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import type { IncomingMessage, ServerResponse } from 'http'
22
import type { Stack, InputLayer, Handle, App, AppOptions } from './types'
33
import { promisifyHandle } from './promisify'
4-
import { send, error, MIMES } from './utils'
4+
import { send, createError, error, MIMES } from './utils'
55

66
export function createApp (options: AppOptions = {}): App {
77
const stack: Stack = []
@@ -35,10 +35,7 @@ export function createApp (options: AppOptions = {}): App {
3535
}
3636
}
3737

38-
const error = new Error('Not found: ' + originalUrl)
39-
// @ts-ignore
40-
error.statusCode = 404
41-
throw error
38+
throw createError(404, 'Not Found')
4239
}
4340

4441
const handle: Handle = function (req: IncomingMessage, res: ServerResponse) {

src/utils.ts

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,16 +17,29 @@ export function defaultContentType (res: ServerResponse, type: string) {
1717
}
1818

1919
export function error (res: ServerResponse, error: Error | string, debug?: boolean, code?: number) {
20-
code = code || (res.statusCode !== 200)
21-
? res.statusCode
20+
res.statusCode = code ||
21+
(res.statusCode !== 200 && res.statusCode) ||
2222
// @ts-ignore
23-
: (error.status || error.statusCode || 500)
23+
error.statusCode || error.status ||
24+
500
2425

25-
if (debug && code !== 404) {
26+
if (debug && res.statusCode !== 404) {
2627
console.error(error) // eslint-disable-line no-console
2728
}
2829

29-
res.end(`"Internal Error (${code})"`)
30+
// @ts-ignore
31+
res.statusMessage = res.statusMessage || error.statusMessage || error.statusText || 'Internal Error'
32+
33+
res.end(`"${res.statusMessage} (${res.statusCode})"`)
34+
}
35+
36+
export function createError (statusCode: number, statusMessage: string) {
37+
const err = new Error(statusMessage)
38+
// @ts-ignore
39+
err.statusCode = statusCode
40+
// @ts-ignore
41+
err.statusMessage = statusMessage
42+
return err
3043
}
3144

3245
export function redirect (res: ServerResponse, location: string, code = 302) {

0 commit comments

Comments
 (0)