node.js - How to use static folder but also use routing in Express? -


i'm having major issue routing in express.

in project, there folder /public.

inside /folder have other folders like

- public      |- user      |- common 

initially, way pages served node.js server through res.sendfile(../..). problem .js files , .css files did not know go.

so added

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

but problem is, if try visit /user happens is, static version of index.html file in folder returned, , route defined in node app ignored!

this route - , importantly auth middleware never touched!

how reconcile need serve files static folder, may have routes of same name want control more closely?

app.use('/user', userauth, userroutes); 

assuming /user sort of api don't think express.static intended used way. think best solution use different routes. add /api/ beginning of routes or make sure static files organized under /css, /js, /partials, etc.

if absolutely must support /user static files , api calls need ditch express.static , use accept header custom middleware determines browser asking for. depending on scenario may complicated support variables. simple example this:

app.use(function(req, res, next){      // check accept header make sure json request     if(req.accepts('application/json') && !req.accepts('html')) {          // json request forward request on next middleware(eventually hitting route)         return next();     }      // not json request lets serve file if exists...      // todo use req.path check if file exists - if not 404 - need map paths      // /users check /users/index.html if need support     var fileexists = false;      return fileexists ? res.sendfile('...') || res.status(404).send('not found'); }); 

you have make sure when client calls /users sets accept header application/json. client side frameworks have way ajax requests.


Comments