Skip to content

Commit 6fc1ca1

Browse files
committed
fix: Fix node server
1 parent 1cc92e1 commit 6fc1ca1

File tree

1 file changed

+31
-28
lines changed

1 file changed

+31
-28
lines changed

crates/node/polyfills/http.ts

Lines changed: 31 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
// deno-lint-ignore-file prefer-primordials
55

66
import { core } from "ext:core/mod.js";
7+
import { createDeferredPromise } from "ext:deno_node/internal/util.mjs";
78
import {
89
op_fetch_response_upgrade,
910
op_fetch_send,
@@ -1572,10 +1573,10 @@ export class ServerImpl extends EventEmitter {
15721573

15731574
#addr: Deno.NetAddr;
15741575
#hasClosed = false;
1575-
#server: Deno.HttpServer;
1576+
#server: Deno.Server;
15761577
#unref = false;
15771578
#ac?: AbortController;
1578-
#serveDeferred: ReturnType<typeof Promise.withResolvers<void>>;
1579+
#servePromise: any;
15791580
listening = false;
15801581

15811582
constructor(opts, requestListener?: ServerHandler) {
@@ -1592,15 +1593,14 @@ export class ServerImpl extends EventEmitter {
15921593

15931594
this._opts = opts;
15941595

1595-
this.#serveDeferred = Promise.withResolvers<void>();
1596-
this.#serveDeferred.promise.then(() => this.emit("close"));
1596+
this.#servePromise = createDeferredPromise();
1597+
this.#servePromise.promise.finally(() => this.emit("close"));
15971598
if (requestListener !== undefined) {
15981599
this.on("request", requestListener);
15991600
}
16001601
}
16011602

16021603
listen(...args: unknown[]): this {
1603-
// TODO(bnoordhuis) Delegate to net.Server#listen().
16041604
const normalized = _normalizeArgs(args);
16051605
const options = normalized[0] as Partial<ListenOptions>;
16061606
const cb = normalized[1];
@@ -1624,7 +1624,7 @@ export class ServerImpl extends EventEmitter {
16241624
port,
16251625
} as Deno.NetAddr;
16261626
this.listening = true;
1627-
nextTick(() => this._serve());
1627+
this._serve();
16281628

16291629
return this;
16301630
}
@@ -1643,8 +1643,6 @@ export class ServerImpl extends EventEmitter {
16431643
const socket = new Socket({
16441644
handle: new TCP(constants.SERVER, conn),
16451645
});
1646-
// Update socket held by `req`.
1647-
req.socket = socket;
16481646
this.emit("upgrade", req, socket, Buffer.from([]));
16491647
return response;
16501648
} else {
@@ -1659,29 +1657,33 @@ export class ServerImpl extends EventEmitter {
16591657
return;
16601658
}
16611659
this.#ac = ac;
1662-
try {
1663-
this.#server = serve(
1664-
{
1665-
handler: handler as Deno.ServeHandler,
1666-
...this.#addr,
1667-
signal: ac.signal,
1668-
// @ts-ignore Might be any without `--unstable` flag
1669-
onListen: ({ port }) => {
1670-
this.#addr!.port = port;
1671-
this.emit("listening");
1672-
},
1673-
...this._additionalServeOptions?.(),
1674-
},
1675-
);
1676-
} catch (e) {
1677-
this.emit("error", e);
1678-
return;
1679-
}
16801660

1661+
this.#server = Deno.serve((req) => {
1662+
return handler(req, {
1663+
remoteAddr: {
1664+
hostname: "0.0.0.0",
1665+
port: 9999
1666+
}
1667+
});
1668+
});
1669+
//
1670+
// this.#server = serve(
1671+
// {
1672+
// handler: handler as Deno.ServeHandler,
1673+
// ...this.#addr,
1674+
// signal: ac.signal,
1675+
// // @ts-ignore Might be any without `--unstable` flag
1676+
// onListen: ({ port }) => {
1677+
// this.#addr!.port = port;
1678+
// this.emit("listening");
1679+
// },
1680+
// ...this._additionalServeOptions?.(),
1681+
// },
1682+
// );
16811683
if (this.#unref) {
16821684
this.#server.unref();
16831685
}
1684-
this.#server.finished.then(() => this.#serveDeferred!.resolve());
1686+
this.#server.then((p) => p.finished.then(() => this.#servePromise!.resolve()));
16851687
}
16861688

16871689
setTimeout() {
@@ -1721,7 +1723,7 @@ export class ServerImpl extends EventEmitter {
17211723
this.#ac.abort();
17221724
this.#ac = undefined;
17231725
} else {
1724-
this.#serveDeferred!.resolve();
1726+
this.#servePromise!.resolve();
17251727
}
17261728

17271729
this.#server = undefined;
@@ -1736,6 +1738,7 @@ export class ServerImpl extends EventEmitter {
17361738
}
17371739
}
17381740

1741+
17391742
Server.prototype = ServerImpl.prototype;
17401743

17411744
export function createServer(opts, requestListener?: ServerHandler) {

0 commit comments

Comments
 (0)