Reactjs 如何在React.js前端使用Express routes?

Reactjs 如何在React.js前端使用Express routes?,reactjs,express,react-router,Reactjs,Express,React Router,我可以使用快速路由发送页面内容吗?在经典HTML中,您可以执行以下操作: app.get(“/admin)”,(请求、回复)=>{ res.sendFile(“admin.html”);//或res.render()用于模板引擎,如EJS }); 不幸的是,我无法使用Express routing为React页面提供服务。我找到的唯一方法是使用React Router,从技术上讲,它可以完成任务,但在服务器端我不能做任何其他事情,比如验证登录。从技术上讲,我可以在服务器端为此创建一个API端点

我可以使用快速路由发送页面内容吗?在经典HTML中,您可以执行以下操作:

app.get(“/admin)”,(请求、回复)=>{
res.sendFile(“admin.html”);//或res.render()用于模板引擎,如EJS
});
不幸的是,我无法使用Express routing为React页面提供服务。我找到的唯一方法是使用React Router,从技术上讲,它可以完成任务,但在服务器端我不能做任何其他事情,比如验证登录。从技术上讲,我可以在服务器端为此创建一个API端点,然后在React JSX页面本身中请求它,但是,由于许多原因,这会带来不便:

  • 让请求只在页面之后发送,这意味着大量的加载和可能的问题,比如用户能够看到他根本看不到的内容
  • 大多数“页面访问”API请求都需要使用密钥(如授权密钥)进行保护
  • 如果API请求是在客户端的任何位置执行的,则密钥是不安全的,并且用户可以手动更改响应,从而造成严重的安全违规

  • 如果有一个用于Express的React呈现程序,您可以直接从页面(例如,
    res.render(“page.JSX”)
    )呈现React JSX文件,它将编译React并发送纯HTML,那就太好了!但当然,我还没有找到这样的应用程序,我怀疑是否有。

    是的,您可以,但只能使用捆绑应用程序。只需发送在react应用程序的build文件夹中找到的index.html

    看起来是这样的: 假设您是express index.js&react应用程序位于应用程序的“client”目录中

      const path = require("path");
      app.get("*", (req, res) => {
        res.sendFile(path.resolve(__dirname, "client", "build", "index.html"));
      });
    

    是的,您可以,但仅限于捆绑应用程序。只需发送在react应用程序的build文件夹中找到的index.html

    看起来是这样的: 假设您是express index.js&react应用程序位于应用程序的“client”目录中

      const path = require("path");
      app.get("*", (req, res) => {
        res.sendFile(path.resolve(__dirname, "client", "build", "index.html"));
      });
    

    没有“反应页面”这样的东西。只有HTML页面加载React捆绑包,就像任何其他JS代码一样,它们只是javascript
    加载。这也是您的答案:您的服务器为页面URL请求生成HTML响应。如果根本没有服务器,HTML也会做同样的事情:根据需要加载css/脚本。@nortex_dev为什么不在React上创建此页面?当用户点击服务器中的某个路径时,您可以从React中轻松重定向,并轻松显示您想要的内容,以确保没有“React页面”这样的事情。只有HTML页面加载React捆绑包,就像任何其他JS代码一样,它们只是javascript
    加载。这也是您的答案:您的服务器为页面URL请求生成HTML响应。如果根本没有服务器,HTML也会做同样的事情:根据需要加载css/脚本。@nortex_dev为什么不在React上创建此页面,当用户点击服务器中的某个路径时,您可以从React中轻松重定向,并轻松显示您想要的内容。@nortex_dev为什么不在React上创建此页面React应用程序和Node应用程序在同一url上运行(这很可能是在生产中运行的,具体取决于部署人员)?如果没有,请解释如何区分路由,可能路由A将在节点中维护,路由B将发送到服务器,如果我希望一条路由受到服务器端保护,而其他路由保持正常,请说明如何区分路由?@nortex_dev您可以通过express中的身份验证中间件实现此功能。如果您喜欢jwt,请查看ExpressJWT:)它应该说明如何确保那里的个人路线安全。类似的事情在会话中也是可能的:)@NtshemboHlongwane这取决于你如何展开它。如果您通过CDN为react应用程序提供服务,或者配置nginx来实现这一点,则没有必要这样做。但是,如果您喜欢上面的方法,您可以通过将react应用程序路由到“*”和由更具体的路由处理的其他路由来区分路由。但您也可以通过“/react/*”@NtshemboHlongwane这样的方式路由您的react应用程序。我发布的代码实际上只是从我部署在heroku上的web应用程序中复制粘贴的。因此,正是您提到的用例:当您的React应用程序和Node应用程序在同一url上运行时,这种类型的配置不适用吗(这很可能在生产中取决于部署人员)?如果没有,请解释如何区分路由,可能路由A将在节点中维护,路由B将发送到服务器,如果我希望一条路由受到服务器端保护,而其他路由保持正常,请说明如何区分路由?@nortex_dev您可以通过express中的身份验证中间件实现此功能。如果您喜欢jwt,请查看ExpressJWT:)它应该说明如何确保那里的个人路线安全。类似的事情在会话中也是可能的:)@NtshemboHlongwane这取决于你如何展开它。如果您通过CDN为react应用程序提供服务,或者配置nginx来实现这一点,则没有必要这样做。但是,如果您喜欢上面的方法,您可以通过将react应用程序路由到“*”和由更具体的路由处理的其他路由来区分路由。但您也可以通过“/react/*”@NtshemboHlongwane这样的方式路由您的react应用程序。我发布的代码实际上只是从我部署在heroku上的web应用程序中复制粘贴的。那么您刚才提到的用例就是:D