static files with express.js


I want to serve index.html and /media subdirectory as static files. The index file should be served both at /index.html and / URLs.

I have

web_server.use("/media", express.static(__dirname + '/media'));
web_server.use("/", express.static(__dirname));

but the second line apparently serves the entire __dirname, including all files in it (not just index.html and media), which I don't want.

I also tried

web_server.use("/", express.static(__dirname + '/index.html'));

but accessing the base URL / then leads to a request to web_server/index.html/index.html (double index.html component), which of course fails.

Any ideas?

By the way, I could find absolutely no documentation in Express on this topic (static() + its params)... frustrating. A doc link is also welcome.

5/3/2012 2:58:12 PM

Accepted Answer

express.static() expects the first parameter to be a path of a directory, not a filename. I would suggest creating another subdirectory to contain your index.html and use that.

Serving static files in Express documentation, or more detailed serve-static documentation, including the default behavior of serving index.html:

By default this module will send “index.html” files in response to a request on a directory. To disable this set false or to supply a new index pass a string or an array in preferred order.

4/17/2019 7:58:20 PM

If you have this setup


Then this should get what you wanted

var express = require('express');
//var server = express.createServer();
// express.createServer()  is deprecated. 
var server = express(); // better instead
  server.use('/media', express.static(__dirname + '/media'));
  server.use(express.static(__dirname + '/public'));


The trick is leaving this line as last fallback

  server.use(express.static(__dirname + '/public'));

As for documentation, since Express uses connect middleware, I found it easier to just look at the connect source code directly.

For example this line shows that index.html is supported

Licensed under: CC-BY-SA with attribution
Not affiliated with: Stack Overflow