node.js - localhost:1337 在生产中会变成什么?
问题描述
我敢肯定这个问题是非常基本的,但它让我感到困惑。目前在开发模式下,我的后端在 localhost:1337 中运行(准确地说是使用 Strapi cms)。但是当网站部署到 Web 服务器时会变成什么?
具体来说,网站将驻留在子目录而不是根目录中,这会影响吗?
目前这是我在项目中使用的 url 作为图像 src: localhost:1337/uploads/image-example.jpg
我试图了解部署项目后新的 url 是什么,更重要的是它部署在子目录中而不是根目录中
提前致谢
解决方案
你不应该做任何事情。
大多数(如果不是全部)Web 主机使用PORT
环境变量来配置应用程序服务器。我刚刚通过 Strapi 进行了快速代码搜索,发现了这个:
"port": "${process.env.PORT || 1337}",
读取环境变量或使用默认值(而不是要求随机端口0
,以在开发时进行预测)。如果您使用他们的启动脚本,我会假设您的应用程序具有相同的。
在许多情况下,这已经足够了,但有两个例外。
如果您的应用程序服务器不知道它的 URL,它只能生成相对 URL。例如,它将无法撰写包含指向其自身的链接的电子邮件。
HTTP 重定向从前需要一个绝对 URL,但后来被修改了。
仅设置端口假定应用程序将安装在
/
. 例如,如果您正在配置自己的 Web 服务器(而不是 Heroku),并且希望将您的应用程序挂载到 上/blog
,那么您需要某种方式告诉您的应用程序,以便它可以在路径上放置正确的前缀。可以通过将 URL 限制为仅相对路径来解决此问题,但这听起来很乏味,我认为通常不会这样做。并且传入的请求实际上没有足够的信息来识别用户正在查看的 URL。相反,您会带外显示应用程序的 URL。
例如,Grafana在其配置文件中有一个
root_url
变量,您可以在其中放置完整的 URL 前缀,Prometheus接受一个-web.external-url
参数等。但是,我认为 Heroku 不能将您的应用程序挂载到 以外的任何地方
/
,因此端口应该足够了。
这是一个在 Heroku 上运行并向您展示其环境的完整服务器:
const app = require("express")();
app.set("json spaces", 2);
app.get("/", (req, res) => {
res.send(process.env);
});
const server = app.listen(process.env.PORT, () => {
console.log('server is up on', server.address());
});
PORT
变量是它需要的所有配置;环境不包括应用程序名称。
硬编码应用程序的生产 URL 可能会成为维护负担,因此如果您最终教应用程序的 URL 是什么,请确保它仍然可以使用命令行参数或环境变量进行配置。
因此,要具体回答您的问题,您的图像 src 应以/uploads
.
推荐阅读
- share - 共享 ANE 不验证密钥
- database - 如果值为空,则将字符串设置为空
- spring-boot - 使用外部配置部署战争
- python - Flask 应用程序配置采用其默认值而不是我的 config.py
- salesforce - Salesforce Apex——实现嵌套表输出的更好方法
- php - 禁用 URL 中的匹配目录
- c# - 单击另一个应用程序中的按钮
- orchardcms - 如何获取 Orchard Cms 中每个 List 项的顺序?
- java - 如何在 Android Studio 中将网站内容转换为字符串?
- post - 如何通过 JSON 格式的 POST 请求在 google sheet 脚本中获取数据?