Search code examples
node.jsexpressurl-routing

Node.js: url route with the CNAME record


I want to map example.org and cname.example.org to two different node.js app. But use no http web server such as nginx.

And the web framework is express.

So is there are any middleware in express or node.js to do this?


Solution

  • Express uses connect so you can do this:

    var express = require('express'),
        app = express();
    
    app.use(express.vhost('example.org', require('./exampleApp/')));
    app.use(express.vhost('cname.example.org', require('./cnameExampleApp/')));
    
    app.listen(80);
    

    There is also an example on github: https://github.com/visionmedia/express/tree/master/examples/vhost

    And here the reference for connect.vhost: http://www.senchalabs.org/connect/vhost.html

    Edit: In recent express versions, most middlewares like vhost are not included, so you will have to install them manually.

    First, run:

    $ npm install --save vhost
    

    Updated code snippet:

    const express = require("express");
    const vhost = require("vhost");
    
    const app = express();
    
    app.use(vhost("example.org", require("./exampleApp/")));
    app.use(vhost("cname.example.org", require("./cnameExampleApp/")));
    
    app.listen(80);