Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Two apps in expressjs

I am building an app with express js which will have different clients like web and mobile. I didnt want to use one app for both as some middleware would be additional burden. For say like session middleware. So is it possible for one project to have two apps. And how would it work?

like image 266
Saransh Mohapatra Avatar asked May 04 '26 14:05

Saransh Mohapatra


1 Answers

The app object that you make in express is a function(req,res,next) that is suitable for Express's own middleware chains. So you can use app.use to send requests matching a leading path fragment to an app defined elsewhere.

Docs: http://expressjs.com/api.html#app.use

$ npm install express

//mobile.js
var app = require('express')();
app.get('/', function(req, res){ 
  res.send('Mobile Route') 
});
module.exports = app;


//desktopApp.js
var http = require('http');
var express = require('express');
var desktopApp = express();
var mobileApp = require('./mobile.js');

desktopApp.use('/mobile', mobileApp)
desktopApp.use(desktopApp.router);
desktopApp.use(express.errorHandler());

desktopApp.get('/', function(req, res){ 
  res.send('Desktop Route') 
});

desktopApp.get('/mobile', function(req, res){ 
  // Because Express respects the order that you set up the middleware chain,
  // the mobileApp `/mobile` route gets first dibs to send a response or next()
  res.send('Inaccessible Desktop Route') 
});

desktopApp.get('/mobile/foobar', function(req, res){ 
  // When mobileApp can't find any suitable route matching this path, it gives
  // up, and desktopApp continues to pass the request down the middleware stack.
  // It ends up matching this route, where we send a response
  res.send('Desktop Route') 
});

http.createServer(desktopApp).listen(3000, function(){
  console.log('Listening on 3000');
});


// Results
$ curl localhost:3000/
Desktop Route

$ curl localhost:3000/mobile/
Mobile Route