'argument hostname required' vhost

99 Views Asked by At

Having a weird issue with express vhost inside AWS. Every time I deploy I get an error in my EB log saying:

TypeError: argument hostname is required
    at vhost (/var/app/current/node_modules/vhost/index.js:39:11)
    at Object.<anonymous> (/var/app/current/app.js:554:9)
    at Module._compile (internal/modules/cjs/loader.js:999:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1027:10)
    at Module.load (internal/modules/cjs/loader.js:863:32)
    at Function.Module._load (internal/modules/cjs/loader.js:708:14)
    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:60:12)
    at internal/main/run_main_module.js:17:47
/var/app/current/node_modules/vhost/index.js:39
    throw new TypeError('argument hostname is required')
    ^

If I have a look at the vhost module, index.js: line 36 we have the following:

function vhost(hostname, handle) {
  if (!hostname) {
    throw new TypeError('argument hostname is required')
  }

  if (!handle) {
    throw new TypeError('argument handle is required')
  }

  if (typeof handle !== 'function') {
    throw new TypeError('argument handle must be a function')
  }

Not even any typechecking or anything on hostname like there is for handle, just checking if the value is passed in. Which it clearly is in the following code:

const app = express();
const register_app = express();
const nonadmin_app = express();
    register_app.use(express.static(path.resolve(__dirname, './build/register')));
nonadmin_app.use(express.static(path.resolve(__dirname, './build/nonadmin')));    

app.use(vhost('register.<eb-dev-url>.elasticbeanstalk.com/', register_app))
app.use(vhost('nonadmin.<eb-dev-url>.elasticbeanstalk.com/', nonadmin_app))
app.use(vhost('api.<eb-dev-url>.elasticbeanstalk.com/', api))

register_app.get('/register', (req, res) => {
    res.sendFile(path.resolve(__dirname, './build/register', 'index.html'));
})

nonadmin_app.get('/nonadmin', (req, res) => {
    res.sendFile(path.resolve(__dirname, './build/nonadmin', 'index.html'));
})

I'm not convinced this is a problem with vhost because when using register.localhost, nonadmin.localhost, or api.localhost when running this app locally using nodemon it works just fine. I also tried deploying with a .localhost suffix and still did not work.

Is there something I am missing in terms of AWS hostname config?

1

There are 1 best solutions below

0
On

The answer was trailing slashes in the hostname argument.

Will raise a bug request.