patternjavascriptMinor
Serving static assets through wildcard rule
Viewed 0 times
wildcardruleservingassetsthroughstatic
Problem
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.
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');Solution
There is a better way.
If you wish to serve static files with express - it comes bundled with
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
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.Code Snippets
app.use(express.static(__dirname + '/public'));Context
StackExchange Code Review Q#29401, answer score: 5
Revisions (0)
No revisions yet.