1

当我刷新索引路由(/)和登录页面(/login)上的页面时,它工作正常。

但是,当我在其他路线上刷新时,我的网站出现错误,例如/user/123456.

因为无论请求是什么,浏览器总是获取 HTML 文件。
因此,和中的内容main.css都是main.jsHTML,以及浏览器错误。

在此处输入图像描述

我已经阅读了 create-react-app 的 README。
无论我使用serve package( $serve -s build -p 80)还是express,都会产生奇怪的bug。

以下是我的服务器代码:

//server.js
const express = require('express');
const path = require('path');
app.use(express.static(path.join(__dirname, 'build')));
app.get('/*', (req, res) => {
  res.sendFile(path.join(__dirname, 'build', 'index.html'));
});
const PORT = process.env.PORT || 80;
app.listen(PORT, () => {
  console.log(`Production Express server running at localhost:${PORT}`);
});

编辑:我已经弄清楚问题出在哪里。
我创建了一个新项目,并将其与我的进行了比较。新项目中静态文件的路径是绝对的,但在我的项目中是相对的。
结果,我"homepage": "."package.json.

//package.json
{ ....
  dependencies:{....},
  ....,
- "homepage": "."
}

现在一切都按预期工作。我怎么这么不小心...

4

3 回答 3

1

我已经弄清楚问题出在哪里了。我创建了一个新项目,并将其与我的进行了比较。新项目中静态文件的路径是绝对的,但在我的项目中是相对的。结果,我"homepage": "."package.json中删除。

//package.json
{ ....
 dependencies:{....},
 ....,
- "homepage": "."
}

现在一切都按预期工作。我怎么这么不小心...

于 2017-05-17T08:48:45.107 回答
0

如果您的路由是在它可能不匹配/user/**之后定义的,因为它会获取所有请求并返回 index.html。尝试不使用or 之前声明其他路线。app.get('/*', .../**

于 2017-05-14T15:59:11.963 回答
0

首先,我以为您误解了服务器部分。在您的情况下,您将serve其用作服务器。这是 [serve] 提供的静态服务器。如果你想使用你自己的server.js,你应该运行node server.jsnode server

我也和你做了同样的事情,没有这个问题。以下是我所做的:

  1. create-react-app my-app
  2. npm run build
  3. sudo serve -s build -p 80sudo对于 1024 以下的端口)

我得到了结果:

/用户/321

我猜你可能会忘记构建脚本。您可以尝试以下方法:

  1. 删除build/文件夹
  2. npm run build再次运行

建议:如果你想专注于前端,你可以使用 [serve]。您将很容易专注于您需要的东西。

于 2017-05-16T20:23:54.430 回答