如何将 Strapi API 和管理面板与另一个节点应用程序(使用 Strapi API)集成?
How to integrate Strapi API and Admin Panel with another node app (that consumes Strapi API)?
我正在尝试开发一个使用 Strapi 管理面板 api 生成的应用程序,同时作为一个使用此 api 的网站。
所以,基本上,我正在尝试建立一个网站:
其中 /api
将服务器路由为 Strapi API 端点
其中 /admin
路由用作 API 创建的 Strapi 管理面板
所有其他路由都配置为服务于我的网站,即:
/
路由是我网站的着陆页
/contacts
是联系人页面
等
此外,网站的静态文件 (html/css/etc) 应该由服务器提供,该服务器分别使用生成的 API(服务器端) .
希望我没有表达得太含糊。
本质上,我需要将一个 node.js 应用程序(我的网站)与另一个 node.js 应用程序 (Strapi) 集成在一起,以便它们可以无缝地协同工作 作为一个.
有人知道如何实现吗?
我在 Whosebug 和 Strapi GitHub 问题上阅读了一些答案,有些人说实现这一点的方法是 运行 两个单独的应用程序不同的端口,但我觉得不合适(或者我只是不明白一些基本的东西)。
我需要做的是制作一个简单的应用程序,基本上是一个简单的多页网站,但使用来自 Strapi 的 api 生成工具进行了增强api。
我启动了我的 Strapi 应用程序并 运行ning 我想也许我应该在应用程序文件夹结构中找到一些地方来放置我的网站(即所有静态内容到 public
文件夹),但是服务器端的东西放在哪里?
而且我需要使用模板引擎,所以"where to put the client-side files"的问题又出现了。我越深入代码,就越困惑。
PS:我可以使用 Koa 作为 Strapi 的服务器。
PPS:此外,我计划在单个 Dyno 上将应用程序部署到 Heroku(如果重要的话)。
好的,我刚试过路由前缀,这就是我建议你的解决方案。
因此您必须构建您的网站应用程序。并将构建推送到 Strapi 应用程序的 ./public
文件夹中。
然后在您的 api/.../config/routes.json
文件中,您必须在每个路由和所有 API 的 config
键中添加一个选项 prefix
{
"routes": [
{
"method": "POST",
"path": "/restaurants",
"handler": "Restaurant.create",
"config": {
"policies": [],
"prefix": "/api"
}
}
]
}
- 所以最后你会让你的管理员在
/admin
- 您的 API 端点以
/api
为前缀
- 你的 website/assets 在
/
我发现自己处于类似情况。在我的情况下,我想在一个服务器实例中部署 Strapi 和一个静态站点(在我的例子中是用 Gatsby 构建的),至少在可能的情况下尝试一下。
原来的post还有一些悬而未决的问题,所以让我根据我的上下文回答它们:
首先,是的,这是可能的。但是每个应用程序都必须在自己的端口上运行。通过这种方式,您的服务器知道根据请求提供哪个服务。尝试将它们混合到一个端口中会使两个应用程序一团糟。
在我的情况下,我最终做的是在端口 1337 中安装 Strapi 运行 并在端口 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(端口、路由、 ETC)。如果你想使用 Heroku,那么你应该为每个应用程序准备一个单独的 Dyno。一个用于 Strapi,另一个用于另一个应用程序。
我强烈建议像 DigitalOcean 或任何其他您可以完全控制 Digital Ocean 中的服务器的东西,称为 Droplet。我能够在同一个 Droplet 上安装一个 Strapi 实例,并为我在 Gatsby 中构建的静态站点提供服务。
我正在尝试开发一个使用 Strapi 管理面板 api 生成的应用程序,同时作为一个使用此 api 的网站。
所以,基本上,我正在尝试建立一个网站:
其中
/api
将服务器路由为 Strapi API 端点其中
/admin
路由用作 API 创建的 Strapi 管理面板所有其他路由都配置为服务于我的网站,即:
/
路由是我网站的着陆页/contacts
是联系人页面等
此外,网站的静态文件 (html/css/etc) 应该由服务器提供,该服务器分别使用生成的 API(服务器端) .
希望我没有表达得太含糊。
本质上,我需要将一个 node.js 应用程序(我的网站)与另一个 node.js 应用程序 (Strapi) 集成在一起,以便它们可以无缝地协同工作 作为一个.
有人知道如何实现吗?
我在 Whosebug 和 Strapi GitHub 问题上阅读了一些答案,有些人说实现这一点的方法是 运行 两个单独的应用程序不同的端口,但我觉得不合适(或者我只是不明白一些基本的东西)。
我需要做的是制作一个简单的应用程序,基本上是一个简单的多页网站,但使用来自 Strapi 的 api 生成工具进行了增强api。
我启动了我的 Strapi 应用程序并 运行ning 我想也许我应该在应用程序文件夹结构中找到一些地方来放置我的网站(即所有静态内容到 public
文件夹),但是服务器端的东西放在哪里?
而且我需要使用模板引擎,所以"where to put the client-side files"的问题又出现了。我越深入代码,就越困惑。
PS:我可以使用 Koa 作为 Strapi 的服务器。
PPS:此外,我计划在单个 Dyno 上将应用程序部署到 Heroku(如果重要的话)。
好的,我刚试过路由前缀,这就是我建议你的解决方案。
因此您必须构建您的网站应用程序。并将构建推送到 Strapi 应用程序的 ./public
文件夹中。
然后在您的 api/.../config/routes.json
文件中,您必须在每个路由和所有 API 的 config
键中添加一个选项 prefix
{
"routes": [
{
"method": "POST",
"path": "/restaurants",
"handler": "Restaurant.create",
"config": {
"policies": [],
"prefix": "/api"
}
}
]
}
- 所以最后你会让你的管理员在
/admin
- 您的 API 端点以
/api
为前缀
- 你的 website/assets 在
/
我发现自己处于类似情况。在我的情况下,我想在一个服务器实例中部署 Strapi 和一个静态站点(在我的例子中是用 Gatsby 构建的),至少在可能的情况下尝试一下。
原来的post还有一些悬而未决的问题,所以让我根据我的上下文回答它们:
首先,是的,这是可能的。但是每个应用程序都必须在自己的端口上运行。通过这种方式,您的服务器知道根据请求提供哪个服务。尝试将它们混合到一个端口中会使两个应用程序一团糟。
在我的情况下,我最终做的是在端口 1337 中安装 Strapi 运行 并在端口 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(端口、路由、 ETC)。如果你想使用 Heroku,那么你应该为每个应用程序准备一个单独的 Dyno。一个用于 Strapi,另一个用于另一个应用程序。
我强烈建议像 DigitalOcean 或任何其他您可以完全控制 Digital Ocean 中的服务器的东西,称为 Droplet。我能够在同一个 Droplet 上安装一个 Strapi 实例,并为我在 Gatsby 中构建的静态站点提供服务。