const listener = Deno.listen({ port: 8080 }); const decoder = new TextDecoder(); const encoder = new TextEncoder(); for await (const conn of listener) { handleConn(conn); } async function handleConn(conn: Deno.Conn) { const buf = new Uint8Array(1024); const bytes = await conn.read(buf); if (bytes === null) { conn.close(); return; } const rawRequest = decoder.decode(buf.subarray(0, bytes)); console.log(rawRequest); const [ requestMethod, requestHost, requestUserAgent, requestAccept, requestContentType, requestContentLength, _, requestBody, ] = rawRequest.split("\r\n"); const [method, path, protocol] = requestMethod.split(" "); const [, host] = requestHost.split(" "); const [, userAgent] = requestUserAgent.split(" "); const [, accept] = requestAccept.split(" "); const [, contentType] = requestContentType.split(" "); const [, contentLength] = requestContentLength.split(" "); const responseBody = `{` + `"method": "${method}",` + `"path": "${path}",` + `"protocol": "${protocol}",` + `"host": "${host}",` + `"user-agent": "${userAgent}",` + `"accept": "${accept}",` + `"content-type": "${contentType}",` + `"content-length": "${contentLength}",` + `"body": "${requestBody}"` + `}\n`; const response = "HTTP/1.1 200 OK\r\n" + "Content-Type: text/json\r\n" + `Content-Length: ${responseBody.length}\r\n` + "Connection: close\r\n" + "\r\n" + responseBody; await conn.write(encoder.encode(response)); conn.close(); }