1

我正在使用react路由器来定义路由。我正在使用create-react-app进行开发。我的问题是,如果我在地址栏中键入子页面的url并尝试访问它在开发版本中工作,但不在生产版本中。React路由在facebook的create-react-app版本中不起作用

我使用AA简单Express服务器托管的生产建设

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); 
+0

哪个URL?主要的一个 - yourdomain.com/或一个子页面 - yourdomain.com/some/page/123? –

+0

@HoriaComan子页面 – Bhuthaya

回答

4

您必须配置Web服务器服务于同一页面您已经定义了所有路由,或实现服务器端渲染阵营。开发Web服务器可能是这样配置的,但生产版本(Apache?Nginx?别的?)不是。 This question可能会有所帮助。

这就是为什么React用于构建单页应用程序。你有一个传统的网页,它加载了一些脚本 - 最有可能的构建过程的输出,然后这些脚本负责其他的一切。这包括生成新的DOM,向“服务器”发送数据请求,甚至在视图更改时通过操作URL来伪造多页应用行为。这最后一点是反应路由器所做的。

但是,Web服务器通常对这些事情并不在意。他们知道如何提供网址。当你申请yourmainmain.com/时,他们会提供该主页面,但是当你申请你的域名.com/some/page/123时,他们将不知道该如何提供服务,除非特别配置。另一种配置是返回这些其他URL的主页面的内容。反应路由器将拿起的URL和使用正确的组件,所以一切都会看起来OK>

+1

更具体地说,作者希望在提供'index.html'的处理程序中将'/'更改为'/ *'。 –