Exercices CM 1
This commit is contained in:
62
exercice5.ts
Normal file
62
exercice5.ts
Normal file
@@ -0,0 +1,62 @@
|
||||
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();
|
||||
}
|
||||
Reference in New Issue
Block a user