当我在索引路由(/
)和登录页面(/login
)上刷新页面时,它工作正常。
但是,当我在其他路线上刷新时,我的网站会出错,例如/user/123456
。
因为无论请求是什么,浏览器总是获取HTML文件
因此,main.css
和main.js
中的内容都是HTML,浏览器错误。
我已经阅读了create-react-app的自述文件
无论我使用serve包($serve -s build -p 80
)还是表达,都会产生奇怪的错误。
以下是我的服务器代码:
//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}`);
});
编辑:我已经找到导致问题的原因
我创建了一个新项目,并将其与我的相比较。新项目中静态文件的路径是绝对,但在我的项目中是 relative 。
因此,我删除了"homepage": "."
中的package.json
。
//package.json
{ ....
dependencies:{....},
....,
- "homepage": "."
}
现在一切正常。我怎么不小心......
答案 0 :(得分:1)
我已经找到导致问题的原因。
我创建了一个新项目,并将其与我的相比较。新项目中静态文件的路径是绝对,但在我的项目中是 relative 。
因此,我删除了 package.json 中的"homepage": "."
。
//package.json
{ ....
dependencies:{....},
....,
- "homepage": "."
}
现在一切正常。我怎么不小心......
答案 1 :(得分:0)
如果您的路由/user/**
在app.get('/*', ...
后定义,则可能不匹配,因为/*
获取所有请求并返回index.html。
尝试不使用*
或在之前声明其他路线。
答案 2 :(得分:0)
首先,我以为你误解了服务器部分。在您的情况下,您使用serve
作为您的服务器。这是[serve]提供的静态服务器。如果您想使用自己的server.js
,则应运行node server.js
或node server
。
我也和你做了同样的事情,没有这个问题。以下是我的所作所为:
create-react-app my-app
npm run build
sudo serve -s build -p 80
(sudo
表示1024以下的端口)我得到了结果:
我猜你可能会忘记构建脚本。您可以尝试以下方法:
build/
文件夹npm run build
建议:如果你想专注于前端,你可以使用[serve]。您可以轻松地专注于您需要的东西。