localhost:1337在生产中会变成什么?

时间:2019-04-16 14:09:38

标签: node.js backend strapi

我确定这个问题很基本,但这使我感到困惑。 当前在开发模式下,我的后端在localhost:1337中运行(确切地说,使用Strapi cms)。 但是,将网站部署到Web服务器后会变成什么?

具体来说,该网站将位于子目录中而不位于根目录中,这会对此产生影响吗?

当前,这是我在项目内部将其用作图片src的网址: 本地主机:1337 / uploads / image-example.jpg

我正在尝试了解项目部署后新的URL是什么,而且它部署在子目录中而不是根目录中

预先感谢

1 个答案:

答案 0 :(得分:1)

您无需执行任何操作。

大多数(如果不是全部)Web主机使用PORT环境变量来配置应用程序服务器。我只是通过Strapi进行了快速代码搜索,发现this

"port": "${process.env.PORT || 1337}",

读取环境变量或使用默认值(而不是请求带有0的随机端口,以便在开发时具有可预测性)。如果您使用他们的入门脚本,那么我认为您的应用程序具有相同的脚本。

在很多情况下,这就足够了,只有两个例外。

  1. 如果您的应用程序服务器不知道其URL,则只能生成相对URL。例如,它将无法撰写包含指向其自身链接的电子邮件。

    HTTP重定向一次需要一个绝对URL,but that has since been amended

  2. 仅设置端口将假定应用程序将被安装在/上。例如,如果您要配置自己的Web服务器(而不是Heroku),并且希望将应用程序安装在/blog上,则需要某种方法来告诉您的应用程序,以便可以在其上添加正确的前缀路径。

    有可能通过仅将URL限制为相对路径来解决此问题,但这听起来很乏味,而且我认为通常不会这样做。而且,传入请求实际上没有足够的信息来识别用户正在查看的URL。相反,您带外显示应用程序的URL。

    例如,在其配置文件中的Grafana has a root_url variable中,您放置了完整的URL前缀,Prometheus takes a -web.external-url argument等。

    但是,我认为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应该以{{1​​}}开头。