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