【问题标题】:'argument hostname required' vhost'需要参数主机名' vhost
【发布时间】:2021-10-10 05:45:49
【问题描述】:

AWS 内部的 express vhost 有一个奇怪的问题。每次部署时,我的 EB 日志中都会出现错误消息:

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')
    ^

如果我看一下 vhost 模块 index.js:第 36 行,我们有以下内容:

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')
  }

甚至没有任何类型检查或主机名上的任何东西,例如用于句柄,只是检查值是否传入。它显然在以下代码中:

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'));
})

我不相信这是 vhost 的问题,因为当使用 register.localhostnonadmin.localhostapi.localhost 在本地使用 nodemon 运行此应用程序时,它工作得很好。我还尝试使用.localhost 后缀进行部署,但仍然无法正常工作。

在 AWS 主机名配置方面我有什么遗漏吗?

【问题讨论】:

    标签: amazon-elastic-beanstalk express-vhost nodejs-express-server


    【解决方案1】:

    答案是hostname 参数中的斜杠。

    将提出错误请求。

    【讨论】:

      猜你喜欢
      • 2018-09-11
      • 1970-01-01
      • 2017-05-04
      • 2011-12-29
      • 1970-01-01
      • 2011-03-22
      • 1970-01-01
      • 1970-01-01
      • 2013-01-22
      相关资源
      最近更新 更多