Verifying headers at top-level

I have a Node.js app built with Express.js framework. I want to check that the user is authorized to do a certain request, I do this by requiring the clients to supply an access token in a header. I don't want to add this to each of the individual functions that the clients have access to. Like this, for an info request about a user:

exports.info = function(req, res) {
    var userId = req.params.id,
        accessToken = req.headers["accesstoken"];
    console.log("received request to get info for userID <"+ userId +">");
    users.User.findOne({accessToken: accessToken}, function(err, user) {
        if(user == null) {
         ...

How can I do this at a higher level? Can I set this header requirement somewhere on a global for express? I want to do this basically for all functions except for the user login function, so all functions except for one.

You can make a small middleware:

verifyUser = function(req,res,next){
  var userId = req.params.id, accessToken = req.headers["accesstoken"];
  console.log("received request to get info for userID <"+ userId +">");
  users.User.findOne({accessToken: accessToken}, function(err, user) {
    if(user == null) {
      ...
    }

     next()
  }
}

Then:

On one request:

app.get("/user/info", verifyUser, exports.info)

On a selection of requests:

app.all(SomeRegex, verifyUser)

On all resquests:

app.use(verifyUser)

Just add your function as one more of the express middleware that runs before all your request processing.

app.use(function(req, res, next) {
    var userId = req.params.id,
        accessToken = req.headers["accesstoken"];
    console.log("received request to get info for userID <"+ userId +">");
    users.User.findOne({accessToken: accessToken}, function(err, user) {
        if(user != null) {
            return next();  // This is ok, keep processing
        } else {
            // don't call next, redirect to login page, etc...
        }
}

app.get('/home', ...);
apg.get('/some_other_page');

You call next to get express to process as usual, or you use redirect, or return an error and don't call next.

You can create a middleware and set it up on each route, you need to authorize. Example:

var myAuthMiddleware = function (req, res, next) {

    // Here goes your code to check if the user complies
    // with the conditions. You can use req.headers, req.user, etc

    if (conditionIsMet) return next();  // If the user complies, you continue the process

    // The user doesn't comply
    return res.send('Error');
}

Then, you use his middleware in the needed routes:

app.get('/my-route', myAuthMiddleware, myRouteHandler);
app.post('/another-route', myAuthMiddleware, myOtherRouteHandler);
// This one doesn't need auth
app.get('/', indexHandler);