I have this code:
const app = express();
const accountApp = express();
const publicApp = express();
publicApp.use(express.static(path.join(process.cwd(), "web/dist/public")));
accountApp.use(express.static(path.join(process.cwd(), "web/dist/account")));
app.use(vhost('account.*', accountApp));
app.use(publicApp);
It works perfectly on localhost
: http://localhost:3000
shows public app, http://account.localhost:3000
shows account app
I hosted it on heroku, added subdomain like this:
And this is on google domains:
And when I go to www.stravamenu.com
it show public app, as it should. But on account.stravamenu.com
it shows public app instead of account app.
Is the problem in vhost
? Or is it heroku or google domains?
CodePudding user response:
Solution:
app.use(vhost('account.*.*', accountApp));
app.use(vhost("www.*.*", publicApp));
For some reason account.*
is not the same as account.*.*
. So account.*
will work on localhost. If you want to change account.*.*
with account.*
I recommend adding a statement that checks if you're in dev mode:
const isProd = proccess.env.PROD;
if(isProd) {
app.use(vhost('account.*.*', accountApp));
app.use(vhost("www.*.*", publicApp));
} else {
app.use(vhost('account.*', accountApp));
app.use(publicApp); // if you don't want to add www before localhost
}
Don't forget to set up subdomains in heroku
and google domains
, and don't forget to add env variable in heroku