reactjs - 如何在 React.js 前端使用 Express 路由?
问题描述
我可以使用 Express 路由来发送页面内容吗?在经典 HTML 中,您可以执行以下操作:
app.get("/admin", (req, res) => {
res.sendFile("admin.html"); // or res.render() for templating engines like EJS
});
不幸的是,我无法使用 Express 路由为React pages提供服务。我发现的唯一方法是使用 React Router,它在技术上可以完成工作,但是我不能在服务器端做任何其他事情,比如验证登录。我可以在技术上为此在服务器端创建一个 API 端点,然后在 React JSX 页面本身中请求它,但是,由于许多原因,这会很不方便:
- 仅在页面之后发送请求,这意味着大量的加载指示和可能的问题,例如用户能够看到他根本看不到的内容。
- 大多数“页面访问”API 请求都需要使用密钥进行保护,例如授权密钥
- 如果 API 请求在客户端的任何地方完成,则密钥是不安全的,并且响应可以由用户手动更改,这会造成巨大的安全违规。
如果有一个用于 Express 的 React 渲染器,您可以在其中直接从页面(例如res.render("page.jsx")
)渲染一个 React JSX 文件,该文件将编译 React 并发送纯 HTML,那就太好了!但是,当然,我还没有找到这样的,我怀疑是否有。
解决方案
是的,您可以,但仅限于捆绑的应用程序。您只需发送您在 react 应用程序的 build 文件夹中找到的 index.html。
看起来像这样:假设您表达 index.js 并且反应应用程序位于您的应用程序的“客户端”目录中。
const path = require("path");
app.get("*", (req, res) => {
res.sendFile(path.resolve(__dirname, "client", "build", "index.html"));
});
推荐阅读
- python - 使用 for 循环向字符串添加新行
- swift - SwiftUI - 在协议中返回不透明类型
- python - 无法选择 CSS 选择器
- maven - ClassNotFoundException:ContextLoaderListener,当使用带有 maven tomcat8 插件和 PostResources 的 Intellij
- javascript - 如何使用插值在 d3 v4 中实现发散色阶?
- android - WebViewClient.onRenderProcessGone() 未在首先崩溃 WebView 时调用
- python - 尽管图像是二进制 opencv,但 findContours() 不起作用
- javascript - 使用哪些散列函数进行 count-min 草图?
- python - PyInstaller 模块未找到
- flutter - Dart json_serializable 泛型类型