IE9, Opera, and older Safari try to download my Node.js server-hosted site as a file?

I... I am completely stumped. This makes absolutely no sense to me.

Now, I'm new to HTML5, CSS, and Javascript, but I feel like I've made a decent (unfinished) website design and a nice, simple (unfinished) server program using Node.js. The thing is though... is that it doesn't render in IE9, Opera, or Safari 5.0.6 or likely many other older versions of the browsers; rather it just tries to download the website as a file that has no extension. Yet it works in Chrome, Firefox, and Safari 5.1.7. (I haven't tested other browsers.)

I don't even know where to start as far as troubleshooting, and I'm hoping someone here can help me.
Hopefully it has something to do with my server configuration or code and an error on my part.

Sources -
Server: http://pastebin.com/vzGnWfgr
HTML: http://pastebin.com/CvPBhmPa
CSS (If necessary): http://pastebin.com/WSAKxqxD

I also have the site live on my server here for now: http://test.kdude63.com/

Also, if it makes any difference, I'm running Ubuntu Server 12.04 LTS on my server.

The content type (MIME type) in your HTTP response is undefined, which I can see when I run a wireshark trace and see your server's 200 response. If I go to http://test.kdude63.com/index.html, opera works fine as it didn't before and the content type is specified in the response. This indicates to me that the handling to your main index page has an issue.

Chrome and firefox seem to handle this undefined data as text/html by default, which is why they have no issues displaying the page.

Also, I see that your case statement has a boolean expression which is not permitted and will lead any pages with an .htm extension to have the same problem as this. Change this:

case '.html' || '.htm':
            contentType = 'text/html';
            break;

to this:

case '.html':
case '.htm':
            contentType = 'text/html';
            break;

In your site(http://test.kdude63.com/), response header of the page have Content-Type: undefined.

Many browsers just download the page when Content-Type is unknown MIME type. Check your app.js or framework for the header setting.