在没有 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 错误