Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Rewrite node:http to not use Request & Response #14384

Draft
wants to merge 35 commits into
base: main
Choose a base branch
from
Draft

Conversation

Jarred-Sumner
Copy link
Collaborator

@Jarred-Sumner Jarred-Sumner commented Oct 6, 2024

What does this PR do?

Extremely WIP.

Rewrite node:http to not use Request & Response for Bun.serve

Introduce a new internal API that currently looks like this and may change at any point:

import { serve } from "bun";

serve({
  port: 3002,

  onNodeHTTPRequest(server, url: string, method: string, headers: Record<string, string>, rawHeaders: string[], handle, hasBody: boolean) {
    handle.writeHead(200, { "Content-Type": "text/plain" });
    handle.end("Hello World");
  },
});

This does not replace fetch in Bun.serve()

How did you verify your code works?

it doesn't really work yet. We aren't emitting socket.

@robobun
Copy link

robobun commented Oct 6, 2024

@Jarred-Sumner, your commit 2cec01f has some failures in #5011

@kravetsone
Copy link

will it be available for the first time through the flag? it sounds dangerous if suddenly the insides change so much

@Jarred-Sumner
Copy link
Collaborator Author

@kravetsone i agree dangerous, but we have far better test coverage than we used to.

@kravetsone
Copy link

@kravetsone i agree dangerous, but we have far better test coverage than we used to.

It's great
But it maybe more painful for developers which don't pin bun docker image version

Test coverage can't find all bugs

@Jarred-Sumner Jarred-Sumner mentioned this pull request Oct 7, 2024
52 tasks
@huseeiin
Copy link
Contributor

huseeiin commented Oct 9, 2024

super cool

@huseeiin
Copy link
Contributor

there was a trick in bun to get the Request object (from a symbol) in node:http:

import { createServer } from "http";

createServer(async (req, res) => {
    const request: Request = req[Object.getOwnPropertySymbols(req)[3]];

    const json = await request.json().catch(() => null);

    res.end(json);
}).listen(3000);

does this PR mean this is no longer gonna be possible?

@etcd
Copy link

etcd commented Oct 15, 2024

Is this likely to fix the following confirmed issue (in https)?

The issue is that the response object of a request does not always contain the right URL.

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.

5 participants