summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBartek IwaƄczuk <biwanczuk@gmail.com>2018-12-12 10:38:46 +0100
committerRyan Dahl <ry@tinyclouds.org>2018-12-12 04:38:46 -0500
commit0212401974434271653e50cc9d8f7188d72a8880 (patch)
treeb458b4c793c3985d49b38e6a892db4c1b22f62c7
parentb94530332910c0b85553dc91fa1912bce308df3c (diff)
File server logging (denoland/deno_std#17)
Original: https://github.com/denoland/deno_std/commit/108127178b7cfd881ea18fabc92d0ee9bf72fd20
-rwxr-xr-xfile_server.ts34
1 files changed, 24 insertions, 10 deletions
diff --git a/file_server.ts b/file_server.ts
index d2b9fe0b0..8159132b3 100755
--- a/file_server.ts
+++ b/file_server.ts
@@ -5,7 +5,7 @@
// TODO Add tests like these:
// https://github.com/indexzero/http-server/blob/master/test/http-server-test.js
-import { listenAndServe, ServerRequest, setContentLength } from "./http";
+import { listenAndServe, ServerRequest, setContentLength, Response } from "./http";
import { cwd, readFile, DenoError, ErrorKind, args, stat, readDir } from "deno";
const dirViewerTemplate = `
@@ -143,7 +143,7 @@ async function serveDir(req: ServerRequest, dirPath: string, dirName: string) {
headers
};
setContentLength(res);
- await req.respond(res);
+ return res;
}
async function serveFile(req: ServerRequest, filename: string) {
@@ -156,7 +156,7 @@ async function serveFile(req: ServerRequest, filename: string) {
body: file,
headers
};
- await req.respond(res);
+ return res;
}
async function serveFallback(req: ServerRequest, e: Error) {
@@ -164,31 +164,45 @@ async function serveFallback(req: ServerRequest, e: Error) {
e instanceof DenoError &&
(e as DenoError<any>).kind === ErrorKind.NotFound
) {
- await req.respond({ status: 404, body: encoder.encode("Not found") });
+ return {
+ status: 404,
+ body: encoder.encode("Not found")
+ };
} else {
- await req.respond({
+ return {
status: 500,
body: encoder.encode("Internal server error")
- });
+ };
}
}
+function serverLog(req: ServerRequest, res: Response) {
+ const d = new Date().toISOString();
+ const dateFmt = `[${d.slice(0, 10)} ${d.slice(11, 19)}]`;
+ const s = `${dateFmt} "${req.method} ${req.url} ${req.proto}" ${res.status}`;
+ console.log(s);
+}
+
listenAndServe(addr, async req => {
const fileName = req.url.replace(/\/$/, "");
const filePath = currentDir + fileName;
+ let response: Response;
+
try {
const fileInfo = await stat(filePath);
if (fileInfo.isDirectory()) {
// Bug with deno.stat: name and path not populated
// Yuck!
- await serveDir(req, filePath, fileName);
+ response = await serveDir(req, filePath, fileName);
} else {
- await serveFile(req, filePath);
+ response = await serveFile(req, filePath);
}
} catch (e) {
- await serveFallback(req, e);
- return;
+ response = await serveFallback(req, e);
+ } finally {
+ serverLog(req, response);
+ req.respond(response);
}
});