Search code examples
javascriptnode.jsexpresssubdomain

Node Express: Requests are taking Top-level domain as the subdomain ??


I am working on a express project where subdomains are used.

Now the problem i am facing is that my domain name is ("companyName.co.in") and my node JS code is considering companyName as the subdomain.

Here is my code:

server.js

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

var subdomain = require('express-subdomain');

var bodyParser = require('body-parser');
var path = require('path');
var expressValidator = require('express-validator');
var expressJwt = require('express-jwt');
var jwt = require('jsonwebtoken');

var cors = require('cors');

app.use(bodyParser.json({limit: '50mb'}));
app.use(bodyParser.urlencoded({ limit: '50mb', extended: true }));
app.use(cors());
//app.use(cookieParser());
app.use(express.static('../app'));
app.use(express.static('static/'));

app.use('/api/user',require('./controllers/user.controller'));


var server = app.listen(3000,function(){    
    console.log('Server listening at 3000');
});

user.controller.js

var express = require('express');
var router = express.Router();

router.get("/details", getUserDetails);

function getUserDetails(req, res) {
    var subdomain = (req.subdomains.length > 0) ? req.subdomains[0] : '';
    console.log(subdomain)
}

module.exports = router;

So when i call the api/user/details i find that it gives the companyName as the subdomain.

like: requesting from "companyName.co.in" subdomain should be null but it gives me subdomain as companyName.

Can you please help how can i let the node server know that "companyName.co.in" this is the host and also allow "*.companyName.co.in" where the subdomain can be anything.


Solution

  • You can solve this in your case by setting the 'subdomain offset' express app setting to 3.

    http://expressjs.com/en/4x/api.html#app.settings.table

    var express = require('express');
    var app = express();
    app.set('subdomain offset', 3);