简体   繁体   中英

NodeJS Express Root Path

In NodeJS Express module, specifying path "/" will catch multiple HTTP requests like "/", "lib/main.js", "images/icon.gif", etc

 var app = require('express')
 app.use('/', authenticate);

In above example, if authenticate is defined as followed

var authenticate = function(request, response, next) {
    console.log("=> path = " + request.path);
    next()
}

Then you would see

=> path = /
=> path = /lib/main.js
=> path = /images/icon.gif

Could anyone advise how to define path in Express "app.use" that only catch "/"?

If you are trying to expose static files, people usually place those in a folder called public/ . express has built-in middleware called static to handle all requests to this folder.

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

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

app.get('/home', function(req, res) {
  res.send('Hello World');
});

Now if you place images/css/javascript files in public you can access them as if public/ is the root directory

<script src="http://localhost/lib/main.js"></script>

As far as I understand, what you need to do is if you have '/' & '/abc' you need to catch it separately.

This will do the trick:

app.use('/abc', abc);
app.use('/', authenticate);

Means, register the /abc middleware first, then do the / middleware.

There is an issue with this solution also. Here we declared /abc only. So when user calls an unregistered path, then it will hit here. You can make use of originalUrl property in request object to determine its / only or there is something else. Here is the documentation for this : http://expressjs.com/en/api.html#req.originalUrl

if(req.originalUrl !== '/'){
   res.status(404).send('Sorry, we cannot find that!');
}
else{
  /*Do your stuff*/
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM