我正在使用反应路由器来定义路由。我正在使用创建反应应用程序为了发展。我的问题是,如果我在地址栏中输入子页面的 url 并尝试访问它,它在开发版本中有效,但在生产版本中无效。
我正在使用一个简单的快速服务器来托管生产构建
var express = require('express'),
app = express(),
http = require('http'),
httpServer = http.Server(app);
app.use(express.static(__dirname + '/build'));
app.get('/', function(req, res) {
res.sendfile(__dirname + '/index.html');
});
app.listen(3001);
您必须配置您的网络服务器,为您定义的所有路由提供相同的页面,或者在 React 中实现服务器端渲染。开发网络服务器可能是这样配置的,但生产服务器(Apache?Nginx?其他什么?)却不是。这个问题可能有帮助。
原因是 React 用于构建单页面应用程序。您有一个传统的网页,它加载一些脚本 - 最有可能是构建过程的输出,然后这些脚本负责处理其他所有事情。这包括生成新的 DOM、向“服务器”发出数据请求,甚至在视图更改时通过操纵 URL 来伪造多页面应用程序行为。最后一点就是react-router 的作用。
然而,网络服务器通常不会注意到这些事情。他们知道如何提供 URL。当您请求 yourdomain.com/ 时,他们将提供该主页,但当您请求 yourdomain.com/some/page/123 时,他们将不知道要提供什么服务,除非经过专门配置。一种配置是还返回这些其他 URL 的主页内容。 React-router 将获取 URL 并使用正确的组件,因此一切看起来都正常>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)