【问题标题】:How to integrate Strapi API and Admin Panel with another node app (that consumes Strapi API)?如何将 Strapi API 和管理面板与另一个节点应用程序(使用 Strapi API)集成?
【发布时间】:2019-11-01 20:09:21
【问题描述】:

我正在尝试开发一个使用 Strapi 管理面板 api 生成的应用程序,同时用作使用此 api 的网站。

所以,基本上,我正在尝试建立一个网站:

  • /api 路由服务器作为 Strapi API 端点

  • 其中/admin 路由用作创建 API 的 Strapi 管理面板

  • 所有其他路由都配置为服务于我的网站,即:

    • /路由是我网站的登陆页面

    • /contacts 是联系人页面

  • 此外,网站的静态文件 (html/css/etc) 应该由分别使用生成的 API(服务器端)的服务器提供。


我希望我没有把自己表达得太模糊。

基本上,我需要将一个 node.js 应用程序(我的网站)与另一个 node.js 应用程序(Strapi)集成在一起,以便它们无缝地协同工作作为一个强>。


有人知道如何实现吗?


我已经在 Stackoverflow 和 Strapi GitHub 问题上阅读了一些答案,有些人说实现这一点的方法是在不同的端口上运行两个单独的应用程序,但我觉得不合适(或者也许我只是不明白一些基本的东西)。

我需要制作一个应用程序,基本上是一个简单的多页网站,但使用 Strapi 的 api 生成工具进行了增强。


我已经启动并运行了我的 Strapi 应用程序,我想也许我应该在应用程序文件夹结构中找到一些位置来放置我的网站(即所有静态内容到 public 文件夹),但是将服务器放在哪里 -副业?

而且我需要使用模板引擎,所以“将客户端文件放在哪里”的问题再次出现。我越深入研究代码,我就越感到困惑。


PS:我可以使用 Koa 作为 Strapi 的服务器。

PPS:此外,我计划在单个 Dyno 上将应用程序部署到 Heroku(如果它很重要的话)。

【问题讨论】:

  • 为什么您的网站需要其他节点进程?
  • @JimLAURIE 这与我需要的完全相反。我需要实现的是将 Strapi 和我的节点应用程序集成为一个(作为一个节点进程)工作,这样/api 的路由将是 Strapi api 端点,/admin 的路由将是管理面板,并且对于该应用程序将提供服务器生成的静态 html 文件或使用来自 api 的 json 响应的所有其他路由。所以它应该是一个单一的应用程序,只是通过管理面板和 api 生成等 Strapi 工具进行了增强。但是,我似乎不明白如何实现这一点:(

标签: node.js heroku strapi


【解决方案1】:

好的,我刚刚使用了路由前缀,这就是我建议你的解决方案。

因此,您必须构建自己的网站应用程序。并将构建推送到 Strapi 应用程序的./public 文件夹中。

然后在您的 api/.../config/routes.json 文件中,您必须在您的每条路由和所有 API 的 config 键中添加一个选项 prefix

{
  "routes": [
    {
      "method": "POST",
      "path": "/restaurants",
      "handler": "Restaurant.create",
      "config": {
        "policies": [],
        "prefix": "/api"
      }
    }
  ]
}
  • 所以最后你的管理员会在/admin
  • 您的 API 端点以 /api 为前缀
  • 以及您在/ 上的网站/资产

【讨论】:

  • 设置 route.config.prefix 不适用于strapi 3.0.1,你必须直接为 route.path 加上前缀
【解决方案2】:

我发现自己处于类似的境地。在我的情况下,我想在一个服务器实例中部署 Strapi 和一个静态站点(在我的例子中是用 Gatsby 构建的),至少尽可能尝试一下。

原帖中还有一些悬而未决的问题,所以让我根据我的上下文回答它们:

首先,是的,这是可能的。但是每个应用程序都必须在自己的端口上运行。这样,您的服务器就知道根据请求为哪一个提供服务。尝试将它们混合到一个端口中会使两个应用程序都变得混乱。

在我的情况下,我最终要做的是让 Strapi 在端口 1337 中运行,并在端口 80 中提供我的静态页面。为了实现这一点,我使用 NGINX 提供内容并充当代理。我首先尝试将它们放在同一个域中,但遇到了很多冲突。所以我强烈建议使用子域。所以我最终是这样的:

  • domain.com 为我的静态页面提供服务
  • api.domain.com 为 Strapi 服务

您可以在 NGINX 中使用您的配置文件,例如:

server {
    server_name domain.com www.domain.com;
    root /var/www/domain.com/html;
}

server {
    server_name api.domain.com
    location / {
         proxy_pass http://127.0.0.1:1337;
         proxy_http_version 1.1;
    }
}

正如您所看到的,您需要执行很多配置,因此我不建议您在 Heroku 中尝试类似的操作,因为您对 Dyno(端口、路由等)确实没有太多控制权.如果你想和 Heroku 一起去,你应该为每个应用程序有一个单独的 Dyno。一个用于 Strapi,另一个用于另一个应用程序。

我强烈建议您使用类似DigitalOcean 或任何其他您可以完全控制 Digital Ocean 中称为 Droplet 的服务器的方法。我能够在同一个 Droplet 上安装一个 Strapi 实例,并为我在 Gatsby 中构建的静态站点提供服务。

【讨论】:

    猜你喜欢
    • 2020-11-29
    • 2020-10-04
    • 2020-01-17
    • 1970-01-01
    • 1970-01-01
    • 2022-11-10
    • 1970-01-01
    • 2022-11-12
    • 2020-06-26
    相关资源
    最近更新 更多