【问题标题】:How to integrate a react frontend and a separate php REST API backend如何集成一个反应前端和一个单独的 php REST API 后端
【发布时间】:2019-04-06 06:49:19
【问题描述】:

我已经建立了一个网站。前端和后端完全分开。前端都是 REACT.JS,后端是一个用 slim 3 编写的 php REST API 服务。前端和后端之间的整个通信是通过 JSON 与 react 消费 API 路由进行的,并且这些路由受 JWT 保护。

当我将应用程序部署到生产环境时,我不知道如何从运行 slim 3 REST 后端的服务器为我的 REACT 前端提供入口点。我知道如果是典型的 MVC,我可以通过 Twig 等模板引擎渲染视图。

在构建我的 REACT 前端之后,整个组件列表被编译为一个 JavaScript 资源,该资源基本上充当前端的入口点。

  1. 有没有一种方法可以让我获取这个最终编译的 JS 资源并通过 API 路由(例如:'/')将其呈现给浏览器,以便可以向我的应用前端提供一个条目?
  2. 如果不是,那我该如何处理这个编译好的 JS 资源呢?

【问题讨论】:

  • 1.是的,您可以在构建后获得最终编译的 JS 文件。如果您使用create-react-app,您可以运行npm run-script build 来构建应用程序。它将为您提供一个包含最终 HTML 和 JS 文件的文件夹。您可以将其托管在服务器上。据我了解,这就是您要找的东西?
  • 也许我不太理解你,但我想你想在你的Slim 3code-base 中作为静态资产或其他东西提供那个 JS 文件,例如在/UI 路线上,这样就不用单独托管前端了?是这样吗?我以前没有尝试过 Slim,但我使用过 LaravelLaravel 支持 VueJS 开箱即用,您可以查看 Laravel 如何使用 Vue 做到这一点,也许您会发现一些东西。跨度>
  • 看看这个repo你可能会发现一些有用的东西
  • @Isuru Abeywardana,是的,我正在使用 create-react-app 并且我也构建了我的应用程序。我还将它与应用程序的其余部分一起托管。我正在寻找一个苗条 3 特定的解决方案,我需要的答案是我如何告诉我的苗条路线“/”来渲染那个资源,比如说驻留在 app/build/app.min.js ?
  • @Mohdule,是的,这正是我想要的,我会看看 laravel 是如何做到的。我希望它对我有用。同时,如果您有任何更新,请告诉我。

标签: php reactjs rest


【解决方案1】:

如果你想要一个完全分离的架构,根端点应该指向你的 HTML(如果需要,服务器重写),然后它将从“/build/app.min.js”加载 ReactJS 聚合文件。然后你的 API 应该暴露给“/api”端点。

这是我推荐的服务器架构

/www
    /public (server should point "^\/(?!api\/)" (anything that does not start by "/api/") requests here, index as index.html)
        /index.html
        /build
            /app.js
            /app.min.js
        /assets
    /api (server should point "^\/api/" (anything that begins by "/api/") requests here, rewriting to point to the index.php file)
        /index.php
        /vendor
            /slim

【讨论】:

  • 我理解并且我做了非常相似的事情。我正在寻找的答案是如何在它的索引方法中制作我的 HomeController,当用户在浏览器中点击“/”时触发该方法,以提供您提到的“/build/app.min.js”?我会喜欢一些 php 代码,最好是 slim 3。无论如何,谢谢你的回答。
【解决方案2】:

我的很多应用都是 reactjs 前端和 php 后端。我通过 fetch 或 axios 调用服务

我有一个 API url 常量配置文件。

例如:api-paths.js

export const GET_USERS = "http://somesite.com/api/get-users/"

在反应组件中,我这样做。

import { GET_USERS } from './api-paths.js';

ComponentDidMount() {
   fetch(GET_USERS, ....... );
}

关于您的问题,请进行生产构建(npm run build,如果使用 create-react-app)并部署所有前端文件以及 php 文件,并且所有对服务器的调用都应该可以正常工作,

【讨论】:

  • 是的,我就是这样做的。所有路线都运行良好。但是我仍然需要为我的反应 UI 提供一个入口点,之后所有 API 都将按照您提到的那样工作。您能否提供一个 HomeController 索引方法的代码示例,您可以在其中为 UI 提供条目?谢谢。
  • 你在哪里部署了你的 react 应用程序?入口点取决于您部署它的位置。是在本地主机中还是在云中?
  • 该应用程序在技术上尚未上线,但我想使用 cPanel 将所有内容部署到标准主机。这就是为什么我需要将我的 react.js 构建的资源文件与后端的其余部分一起保存在某个单独的文件夹中。当浏览器访问主路由时,我想从该文件夹中呈现 react.js 资源。我知道如果前端和后端都单独托管会容易得多,这样就不需要初始进入应用程序的 UI,这也是最终构建的 JS 资源。
  • 上传网站根目录下的所有构建文件,之后就可以通过http://your-site.com访问网站,网络服务器会自动获取索引html文件
猜你喜欢
  • 2019-04-19
  • 2022-06-29
  • 1970-01-01
  • 2019-01-05
  • 2018-05-08
  • 2019-09-29
  • 2020-11-01
  • 2015-03-13
  • 2013-08-03
相关资源
最近更新 更多