我正在使用React BrowserHistory
进行导航。无论URL路径如何,我希望从我的节点服务器提供相同的文件。
我的服务器代码:
const http = require('http');
const path = require('path');
const express = require('express');
const app = express();
const hostname = 'localhost';
app.use(express.static('../public'));
app.get('*', (req, res)=>{
res.sendFile(path.join(__dirname, '../public/index.html'));
});
const port = process.env.PORT || 8007;
app.listen(port, ()=>{
console.log('Production Express server running at localhost:' + port)
});
http://localhost:8007 =>工作正常
http://localhost:8007/help =>工作正常
http://localhost:8007/help/faq =>失败
我希望所有网址都返回相同的资源,由../public
提供。但是,当未从根请求资源时,似乎express.static
不起作用。因此,例如,当浏览器要求<script src="scripts/main.js"></script>
时,它认为我想要../public/help/scripts/main.js
,而我实际上想要../public/scripts/main.js/
。因此,由于express没有找到这样的文件,它会移动到app.get('*'...
,../public/index.html
会在请求脚本时返回<script src="http://localhost:8007/scripts/main.js"></script>
文件。
所以,期望的行为是:
当我在资源请求(I.E. {{1}})中使用绝对路径时,它可以工作,但是显然这样做是不可取的,因为它需要在托管其他地方时进行更改。
我该怎么办?
答案 0 :(得分:0)
您可以使用该条件进行路由:
app.get('*/**', (req, res) => {
res.sendFile(path.join(__dirname, '../public/index.html'));
});
找到我的工作。
请注意此方法,您的浏览器会为每次调用路线重新加载整个页面。