Skip to content

Commit dbd465f

Browse files
authoredAug 1, 2022
feat: send 204 response if null is returned from handler (#154)
1 parent cb5f096 commit dbd465f

File tree

3 files changed

+22
-2
lines changed

3 files changed

+22
-2
lines changed
 

‎src/app.ts

+4-1
Original file line numberDiff line numberDiff line change
@@ -133,8 +133,11 @@ export function createAppEventHandler (stack: Stack, options: AppOptions) {
133133
return send(event, val, MIMES.html)
134134
} else if (isStream(val)) {
135135
return sendStream(event, val)
136+
} else if (val === null) {
137+
event.res.statusCode = 204
138+
return send(event)
136139
} else if (type === 'object' || type === 'boolean' || type === 'number' /* IS_JSON */) {
137-
if (val && (val as Buffer).buffer) {
140+
if (val.buffer) {
138141
return send(event, val)
139142
} else if (val instanceof Error) {
140143
throw createError(val)

‎src/utils/response.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { MIMES } from './consts'
44

55
const defer = typeof setImmediate !== 'undefined' ? setImmediate : (fn: Function) => fn()
66

7-
export function send (event: CompatibilityEvent, data: any, type?: string): Promise<void> {
7+
export function send (event: CompatibilityEvent, data?: any, type?: string): Promise<void> {
88
if (type) {
99
defaultContentType(event, type)
1010
}

‎test/app.test.ts

+17
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,23 @@ describe('app', () => {
1919
expect(res.body).toEqual({ url: '/' })
2020
})
2121

22+
it('can return a 204 response', async () => {
23+
app.use('/api', () => null)
24+
const res = await request.get('/api')
25+
26+
expect(res.statusCode).toBe(204)
27+
expect(res.text).toEqual('')
28+
expect(res.ok).toBeTruthy()
29+
})
30+
31+
it('can return primitive values', async () => {
32+
const values = [true, false, 42, 0, 1]
33+
for (const value of values) {
34+
app.use(`/${value}`, () => value)
35+
expect(await request.get(`/${value}`).then(r => r.body)).toEqual(value)
36+
}
37+
})
38+
2239
it('can return Buffer directly', async () => {
2340
app.use(() => Buffer.from('<h1>Hello world!</h1>', 'utf8'))
2441
const res = await request.get('/')

0 commit comments

Comments
 (0)
Please sign in to comment.