1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-12-24 08:09:08 -05:00

refactor(flash): move remoteAddr to options bag (#17913)

Applies suggestion from #17912
This commit is contained in:
Leo Kettmeir 2023-02-24 23:36:07 +01:00 committed by GitHub
parent 9aebc8bc19
commit 484b6fe2fa
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 29 additions and 15 deletions

View file

@ -89,14 +89,13 @@ Deno.test({ permissions: { net: true } }, async function httpServerBasic() {
const listeningPromise = deferred();
const server = Deno.serve({
handler: async (request, getRemoteAddr) => {
handler: async (request, { remoteAddr }) => {
// FIXME(bartlomieju):
// make sure that request can be inspected
console.log(request);
assertEquals(new URL(request.url).href, "http://127.0.0.1:4501/");
assertEquals(await request.text(), "");
const addr = getRemoteAddr();
assertEquals(addr.hostname, "127.0.0.1");
assertEquals(remoteAddr.hostname, "127.0.0.1");
promise.resolve();
return new Response("Hello World", { headers: { "foo": "bar" } });
},

View file

@ -1163,6 +1163,18 @@ declare namespace Deno {
*/
export function funlockSync(rid: number): void;
/** **UNSTABLE**: New API, yet to be vetted.
*
* Information for a HTTP request.
*
* @category HTTP Server
*/
export interface ServeHandlerInfo {
/** The remote address of the connection. */
remoteAddr: Deno.NetAddr;
}
/** **UNSTABLE**: New API, yet to be vetted.
*
* A handler for HTTP requests. Consumes a request and returns a response.
@ -1173,7 +1185,7 @@ declare namespace Deno {
*
* @category HTTP Server
*/
export type ServeHandler = (request: Request, getRemoteAddr: () => Deno.NetAddr) => Response | Promise<Response>;
export type ServeHandler = (request: Request, info: ServeHandlerInfo) => Response | Promise<Response>;
/** **UNSTABLE**: New API, yet to be vetted.
*

View file

@ -579,16 +579,19 @@ function createServe(opFn) {
);
let resp;
let remoteAddr;
try {
resp = handler(req, () => {
resp = handler(req, {
get remoteAddr() {
if (!remoteAddr) {
const { 0: hostname, 1: port } = core.ops.op_flash_addr(
serverId,
i,
);
return {
hostname,
port,
};
remoteAddr = { hostname, port };
}
return remoteAddr;
},
});
if (ObjectPrototypeIsPrototypeOf(PromisePrototype, resp)) {
PromisePrototypeCatch(