1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-11-29 16:30:56 -05:00

supply the directory to serve as CLI argument (denoland/deno_std#13)

Original: 7cd4d9f4ea
This commit is contained in:
木杉 2018-12-10 09:17:55 +08:00 committed by Ryan Dahl
parent 335343f51f
commit 626cef41b6
2 changed files with 10 additions and 8 deletions

View file

@ -1,20 +1,22 @@
#!/usr/bin/env deno --allow-net #!/usr/bin/env deno --allow-net
// This program serves files in the current directory over HTTP. // This program serves files in the current directory over HTTP.
// TODO Supply the directory to serve as a CLI argument.
// TODO Stream responses instead of reading them into memory. // TODO Stream responses instead of reading them into memory.
// TODO Add tests like these: // TODO Add tests like these:
// https://github.com/indexzero/http-server/blob/master/test/http-server-test.js // https://github.com/indexzero/http-server/blob/master/test/http-server-test.js
import { listenAndServe } from "./http.ts"; import { listenAndServe } from "./http";
import { cwd, readFile, DenoError, ErrorKind } from "deno"; import { cwd, readFile, DenoError, ErrorKind, args } from "deno";
const addr = "0.0.0.0:4500"; const addr = "0.0.0.0:4500";
const currentDir = cwd(); let currentDir = cwd();
const target = args[1];
if (target) {
currentDir = `${currentDir}/${target}`;
}
const encoder = new TextEncoder(); const encoder = new TextEncoder();
listenAndServe(addr, async req => { listenAndServe(addr, async req => {
const fileName = req.url.replace(/\/$/, '/index.html'); const fileName = req.url.replace(/\/$/, '/index.html');
const filePath = currentDir + fileName; const filePath = currentDir + fileName;
let file; let file;
@ -25,7 +27,7 @@ listenAndServe(addr, async req => {
if (e instanceof DenoError && e.kind === ErrorKind.NotFound) { if (e instanceof DenoError && e.kind === ErrorKind.NotFound) {
await req.respond({ status: 404, body: encoder.encode("Not found") }); await req.respond({ status: 404, body: encoder.encode("Not found") });
} else { } else {
await req.response({ status: 500, body: encoder.encode("Internal server error") }); await req.respond({ status: 500, body: encoder.encode("Internal server error") });
} }
return; return;
} }

View file

@ -82,7 +82,7 @@ export async function* serve(addr: string) {
listener.close(); listener.close();
} }
export async function listenAndServe(addr: string, handler: (ServerRequest) => void) { export async function listenAndServe(addr: string, handler: (req: ServerRequest) => void) {
const server = serve(addr); const server = serve(addr);
for await (const request of server) { for await (const request of server) {