我有一个相对基本的问题,关于在使用React创建应用程序时如何构造javascript代码。
我想在多页网站中嵌入一个单页应用程序。例如,我可能有一个主页、一个关于页面、一个注册页面等,所有这些都由运行Express的节点服务器提供服务。它们与反应无关。我还使用passport,它提供自己的页面进行身份验证(本地登录、社交登录、注销等)此外,我在服务器上的/API/上运行了一个GraphQLAPI。
我还想在同一个网站上,在/embed/*
上提供一个react应用程序(react应用程序的基本url是https://mywebsite.com/embed/
,并且有许多子页面由react路由器处理)。
如何在开发和生产中为使用create-react-app
创建的React应用提供服务,作为更大网站的子目录?(Cookies应该在反应应用程序和主网站之间共享。)
我已经成功地使用了create-react-app
中的代理选项来连接到反应应用(在3000端口上运行)的API(在3001端口上运行)。然而,代理似乎无法转发用户在浏览器中输入的网址。(例如:如果我访问localhost:3000/api/
使用获取
在我的代码中,它转发到localhost:3001/api/
所需的。但是,如果我在地址栏中输入相同的网址,它就不会被重定向。相反,我的反应应用程序加载。这是有道理的,但不是我想要的行为。)
你们不需要做任何关于包装的事情。json和其他东西。只要你有任何资产,如图像,字体。。。它们应该包含在包含bundle的build文件夹中(如果使用dist而不是build,则应包含在dist文件夹中)。js。
通过使用create react app,您将在生成文件夹中拥有以下文件:
你所有的代码都会捆绑在一起,你不需要package.json,...
但如果您不使用CreatReact应用程序,则情况会有所不同,您需要包括您的捆绑包。在你的索引中。html
但是有了CRA,你不会一切都是自动的,你也不需要做额外的事情。
此链接可帮助您在生产中找到路由:创建React应用程序:找不到路由
在服务器中,您可以为索引提供服务。如下所示的html:
let root = path.join(__dirname, 'client', 'build');
app.use(express.static(root));
app.use(function(req, res, next) {
if (req.method === 'GET' && req.accepts('html') && !req.is('json') &&
!req.path.includes('.')) {
res.sendFile('index.html', { root });
} else next();
});
希望这对你有帮助