Streamline mime_type handling so it is kept in the environment and only explicitly...
authorNick Downing <downing.nick@gmail.com>
Sun, 21 Oct 2018 04:24:47 +0000 (15:24 +1100)
committerNick Downing <downing.nick@gmail.com>
Sun, 21 Oct 2018 04:24:47 +0000 (15:24 +1100)
Server.js
Site.js

index 7750dc2..9925556 100644 (file)
--- a/Server.js
+++ b/Server.js
@@ -144,6 +144,7 @@ Server.prototype.respond = async function(request, response, protocol) {
       }
       await site.object.respond(
         {
+          mime_type: this.mime_type_default,
           parsed_url: parsed_url,
           pathname: parsed_url.pathname,
           pathname_pos: 0,
diff --git a/Site.js b/Site.js
index 12f182d..0edc74f 100644 (file)
--- a/Site.js
+++ b/Site.js
@@ -193,22 +193,12 @@ Site.prototype.serve_jst = async function(env, pathname) {
     return false
   }
   let out = []
-  let mime_type = await jst(env, out)
-  if (mime_type === undefined) {
-    // for directories the mime type must be returned, for files we
-    // can look it up from the pathname starting at current position
-    // (for files we're guaranteed to be on last pathname component)
-    let filetype = env.pathname.slice(env.pathname_pos) 
-    assert(
-      Object.prototype.hasOwnProperty.call(this.server.mime_types, filetype)
-    )
-    mime_type = this.server.mime_types[filetype]
-  }
+  await jst(env, out)
   let data = Buffer.from(out.join(''))
   console.log(
     `${env.parsed_url.host} serving ${env.pathname} length ${data.length} from jst`
   )
-  this.server.serve(env.response, 200, mime_type, data)
+  this.server.serve(env.response, 200, env.mime_type, data)
   return true
 }
 
@@ -228,7 +218,7 @@ Site.prototype.serve_less = async function(env, pathname) {
   console.log(
     `${env.parsed_url.host} serving ${env.pathname} length ${data.length} from less`
   )
-  this.server.serve(env.response, 200, this.server.mime_types['.css'], data)
+  this.server.serve(env.response, 200, env.mime_type, data)
   return true
 }
 
@@ -245,8 +235,7 @@ Site.prototype.serve_fs = async function(env, pathname) {
   console.log(
     `${env.parsed_url.host} serving ${env.pathname} length ${data.length} from fs`
   )
-  let filetype = env.pathname.slice(env.pathname_pos)
-  this.server.serve(env.response, 200, this.server.mime_types[filetype], data)
+  this.server.serve(env.response, 200, env.mime_type, data)
   return true
 }
 
@@ -267,8 +256,7 @@ Site.prototype.serve_zip = async function(env, pathname) {
   console.log(
     `${env.parsed_url.host} serving ${env.pathname} length ${data.length} from zip`
   )
-  let filetype = env.pathname.slice(env.pathname_pos)
-  this.server.serve(env.response, 200, this.server.mime_types[filetype], data)
+  this.server.serve(env.response, 200, env.mime_type, data)
   return true
 }
 
@@ -340,6 +328,7 @@ Site.prototype.respond = async function(env) {
         this.server.die(env.response)
         return
       }
+      env.mime_type = this.server.mime_types[filetype]
       env.pathname_pos = i + k // advance to "." at start of filetype
       break
     }