Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Express.js middleware branching or multiple app.routes middlewares

We are creating a separate API app, but are forced to make it part of the existing express.js main app.

My question is, how to put API authentication in a proper place. I want to make it a middleware, and behind which would be the app.routes middleware to handle the API routes.

Is it possible to either:

  • Branch off the main middleware stack after determining the subdomain is ['api']?

or

  • Put the authentication middleware and API app.routes middleware in front of the main app.routes middleware? (in effect having two layers of app.routes middleware)

edit:

Also, suppose I go with the second option, is it possible to expose the two middlewares (auth + api app.routes) as a single middleware in the global list?

like image 715
Max Avatar asked Dec 15 '22 11:12

Max


1 Answers

You can route to an express app, with it's own middleware. So one app for most routes, and an api app for api routes.

example: http://runnable.com/UWx2MZS8trEHAACZ

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

app.configure(function () {
  app.use(express.static(__dirname));
});

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

app.get('/api*', api);

api.configure(function () {
  api.use(function (req, res, next) {
    process.stdout.write('checking');
    setTimeout(process.stdout.write.bind(process.stdout, '.'), 100);
    setTimeout(process.stdout.write.bind(process.stdout, '.'), 200);
    setTimeout(process.stdout.write.bind(process.stdout, '.'), 300);
    setTimeout(process.stdout.write.bind(process.stdout, '.'), 400);
    setTimeout(process.stdout.write.bind(process.stdout, '.'), 500);
    setTimeout(process.stdout.write.bind(process.stdout, '.'), 600);
    setTimeout(process.stdout.write.bind(process.stdout, '.'), 700);
    setTimeout(process.stdout.write.bind(process.stdout, '.'), 800);
    setTimeout(process.stdout.write.bind(process.stdout, '.\n'), 900);
    setTimeout(function () {
      next();
    }, 1000);
  });
});

api.get('*', function (req, res) {
  res.send('Hello API');
});

app.listen(process.env.OPENSHIFT_NODEJS_PORT, process.env.OPENSHIFT_NODEJS_IP);
like image 183
generalhenry Avatar answered Dec 20 '22 16:12

generalhenry