Skip to content

Commit

Permalink
fix: revert back support for legacy middleware
Browse files Browse the repository at this point in the history
  • Loading branch information
pi0 committed Mar 31, 2022
1 parent 57db02d commit b3e4f5b
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 3 deletions.
17 changes: 15 additions & 2 deletions src/handler.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,23 @@ export function promisifyHandler (handler: Handler | Middleware): PromisifiedHan
export const promisifyHandle = promisifyHandler

export function callHandler (handler: Middleware, req: IncomingMessage, res: ServerResponse) {
const isMiddleware = handler.length > 2
return new Promise((resolve, reject) => {
const next = (err?: Error) => err ? reject(err) : resolve(undefined)
const next = (err?: Error) => {
if (isMiddleware) {
res.off('close', next)
res.off('error', next)
}
return err ? reject(err) : resolve(undefined)
}
try {
return resolve(handler(req, res, next))
const returned = handler(req, res, next)
if (isMiddleware && returned === undefined) {
res.once('close', next)
res.once('error', next)
} else {
resolve(returned)
}
} catch (err) {
next(err as Error)
}
Expand Down
13 changes: 12 additions & 1 deletion test/app.test.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { Readable, Transform } from 'stream'
import supertest, { SuperTest, Test } from 'supertest'
import { describe, it, expect, beforeEach } from 'vitest'
import { createApp, App } from '../src'
import { createApp, defineMiddleware, App } from '../src'

describe('app', () => {
let app: App
Expand Down Expand Up @@ -174,4 +174,15 @@ describe('app', () => {
const res = await request.get('/test')
expect(res.text).toBe('valid')
})

it('wait for middleware (req, res, next)', async () => {
app.use('/', (_req, res, _next) => {
setTimeout(() => {
res.setHeader('Content-Type', 'application/json')
res.end(JSON.stringify({ works: 1 }))
}, 10)
})
const res = await request.get('/')
expect(res.body).toEqual({ works: 1 })
})
})

0 comments on commit b3e4f5b

Please sign in to comment.