在没有 IP 地址的情况下在 Express 中提供静态文件

Posted

技术标签:

【中文标题】在没有 IP 地址的情况下在 Express 中提供静态文件【英文标题】:Serving static files in Express without an IP adress 【发布时间】:2016-07-16 05:39:13 【问题描述】:

例如,我的模板文件中有以下代码:

<link href="http://localhost:3000/css/bootstrap.min.css" rel="stylesheet">

这迫使我在启动网站时将 IP 地址从 http://localhost:3000 更改为 Web 服务器 IP 地址。可以想象,整个站点有很多模板文件。我已经编写了可以搜索和替换项目模板文件中的 IP 实例的脚本,如果可以的话,我想避免这种情况。

我想保留以下格式:

<link href="css/bootstrap.min.css" rel="stylesheet">

请注意,它与原点无关。我希望 Express 有中间件可以使用服务器的当前位置来提供文件。

我目前在我的server.js 文件中使用此代码:

app.use(express.static(path.join(__dirname ,'/v1/public/')));

如果我在模板文件中指定主机,效果会很好。我没有在网上找到任何可以轻松完成我想做的事情的资源。

【问题讨论】:

为什么不直接使用绝对路径? 我想你想设置不同的端口? ***.com/a/17004592/3662110 @SLaks 如帖子中所述,我必须手动或编写脚本以在启动服务器时自动替换绝对路径。 @jmargolisvt 我没有遇到与端口相关的问题 【参考方案1】:

试试:

href="http://localhost:3000/v1/public/css/bootstrap.min.css" rel="stylesheet"

或相对:

href="./v1/public/css/bootstrap.min.css" rel="stylesheet"

您的静态文件夹是将提供静态资源的文件夹路径。

【讨论】:

【参考方案2】:

如果标头是模板文件,为什么不将完整的 url 作为变量传递给模板呢?您可以通过以下方式在应用级别构建 url:

var baseUrl = req.protocol + '://' + req.get('host');

并将baseUrl 传递给您的标头模板,并在运行时为路径添加前缀。

【讨论】:

此解决方案实用且异常有效。 编辑: 对于未来的开发者:req.get('host') 还在 url 返回的字符串中包含端口和冒号。无需附加它。完全按照 Arbel 的规定使用。

以上是关于在没有 IP 地址的情况下在 Express 中提供静态文件的主要内容,如果未能解决你的问题,请参考以下文章

如何在不重新启动的情况下在 Express 上重新加载一个文件?

如何在没有安装 MQTT 应用程序的设备的情况下在 android 上使用 MQTT 将消息推送到特定 IP?

如何在不重新编译的情况下在 .NET 中动态切换 Web 服务地址?

C/C++ Linux,如何在不使用 IP 的情况下在网络上查找邻居(仅限 MAC)

在没有 android studio 的情况下在本地运行 flutter web 应用程序会引发 firebase 错误

我arp-a之后没有我自己的ip地址啊,别人能上网的时候有别人的地址,这说明啥啊