Skip to content

Fix ExpressAdapter to accept Express app directly#504

Open
heyitsaamir wants to merge 7 commits intomainfrom
fix/express-adapter-accept-app
Open

Fix ExpressAdapter to accept Express app directly#504
heyitsaamir wants to merge 7 commits intomainfrom
fix/express-adapter-accept-app

Conversation

@heyitsaamir
Copy link
Copy Markdown
Collaborator

@heyitsaamir heyitsaamir commented Apr 4, 2026

Summary

  • Fix ERR_HTTP_HEADERS_SENT when passing an http.Server that already has an Express app attached — the adapter no longer creates a second Express app in that scenario
  • ExpressAdapter constructor now accepts http.Server | express.Application | undefined:
    • Express app passed: uses it directly, creates http.Server from it (avoids double request handling)
    • http.Server passed: creates internal Express app, attaches to server (existing behavior)
    • Nothing passed: creates both (existing behavior)
  • Updated Express example to pass the Express app directly (the recommended pattern)

The original http.Server-only constructor was designed to match the HttpPlugin's capabilities, but it led users into a trap: passing http.createServer(app) caused the adapter to attach a second Express app to the same server, resulting in double request handling. Accepting the Express app directly is the natural fix.

Fixes #503

Test plan

  • Existing express-adapter tests pass (9/9)
  • New test: passing an Express app works for both custom routes and adapter-registered routes
  • Manual: verify Express example compiles and runs correctly

heyitsaamir and others added 3 commits March 24, 2026 23:48
These two markdown files are all a human needs to write — the e2e testing
skill generates and manages the actual Playwright test code from here.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
When users passed an http.Server that already had an Express app
(e.g. http.createServer(app)), the adapter created a second Express
app and attached it via server.on('request'), causing double request
handling and ERR_HTTP_HEADERS_SENT errors.

The constructor now accepts http.Server | express.Application:
- Express app: uses it directly, creates server from it (no double handling)
- http.Server: creates internal Express app, attaches to server
- Nothing: creates both (existing behavior)

Fixes #503

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@heyitsaamir heyitsaamir marked this pull request as ready for review April 4, 2026 17:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: ExpressAdapter throws headers already sent error

1 participant