node.js - 本地主机 :1337 become in production? 是什么意思

标签 node.js backend strapi

我确信这个问题非常基本,但它让我感到困惑。 目前处于开发模式,我的后端在 localhost:1337 中运行(准确地说,使用 Strapi cms)。 但是当网站部署到网络服务器上时会变成什么呢?

具体来说,网站将驻留在子目录中而不是根目录中,这会影响吗?

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

我试图了解项目部署后新的 url 是什么,更重要的是它部署在子目录中而不是根目录中

提前致谢

最佳答案

您不必做任何事情。

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

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

读取环境变量或使用默认值(而不是要求使用 0 的随机端口,以便在开发时实现可预测性)。如果您使用他们的启动脚本,我会假设您的应用程序也有相同的脚本。

在许多情况下,这已经足够了,但有两个异常(exception)。

  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 应该以 /uploads 开头。

关于node.js - 本地主机 :1337 become in production? 是什么意思,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55710213/

相关文章:

javascript - NodeJS 域错误处理未拾取 ReferenceError

node.js - Mongoose,如何使用两个或条件执行 find()

strapi - 如何在生命周期中创建 Strapi 组件数据

Strapi v4 plugins.js 问题

arrays - Node.JS + MongoDB 聚合 从 MongoDB 中的数据库中查找数组中的数组

javascript - 在 Sequelize Hooks 中使用 Promise

javascript - 对不同的 NodeJS 项目使用相同的代码库

javascript - SequelizeConnectionError : self signed certificate

node.js - 如何进行服务器端获取调用?

docker - 如何在 dockerized 带中保留我的内容类型