Serving static assets through wildcard rule I wrote this as a way to deliver static portion of the app.  I'm wondering if there is a better way to write this, as I am new to Express.

The goal is to let a single-page app to handle routing as needed. There is an API layer of this app that is defined under the /api/ route namespace.

I wanted to note that all assets are served from /app folder and are not public. I can adjust that, but as of now, that's the folder structure. /app is a compilation destination. root folder contains server.js where the below code resides and contains app/ and src/ folders, as well as server/ folder that contains API related stuff.

var express = require('express');
var http = require('http');
var path = require('path');
var app = express();

require('./express/api')(app);

app.get("/css/*",function(req,res){
  res.sendfile('app'+req.path);
});
app.get("/js/*",function(req,res){
  res.sendfile('app'+req.path);
});
app.get("/img/*",function(req,res){
  res.sendfile('app'+req.path);
});
app.get("/pages/*",function(req,res){
  res.sendfile('app'+req.path);
});
app.get('*',function(req,res){
  res.sendfile('app/index.html');
});


app.listen(3000);
console.log('Listening on port 3000');
There is a better way.

If you wish to serve static files with express - it comes bundled with static middleware. To use it, you simply add this line before your routes:

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


This may require slight adjustment to your paths but it replaces all those manual routes and is more efficient (caching, expiration etc).

Check out this example.

I would, however, suggest that you use something like nginx for your static assets since it's typically more robust and it'll free resources from your node server.