Javascript 从所有路径提供相同资源的节点

Javascript 从所有路径提供相同资源的节点,javascript,node.js,express,react-router,browser-history,Javascript,Node.js,Express,React Router,Browser History,我正在使用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('../publ

我正在使用
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)
});
=>工作正常

=>工作正常

=>失败

我希望所有URL返回相同的资源,从
。/public
提供。但是,当没有从根目录请求资源时,
express.static
似乎不起作用。因此,例如,当浏览器要求
时,它认为我需要
./public/help/scripts/main.js
,而实际上我需要
./public/scripts/main.js/
。因此,因为express找不到这样的文件,所以它会转到
app.get('*'…
),当请求脚本时,它会返回
./public/index.html
文件

因此,期望的行为是:

  • 为任何路径返回相同的index.html(具有任意数量的子文件夹),并让React确定要显示的内容
  • 返回始终相对于提供index.html的路径的资源,而不是相对于URL中的路径
当我在资源请求中使用绝对路径(即
)时,它可以工作,但是这样编写显然是不可取的,因为当它托管在其他地方时,需要更改它


我该怎么办?

您可以将该条件用于路由:

app.get('*/**', (req, res) => {
    res.sendFile(path.join(__dirname, '../public/index.html'));
});
这是我的工作


小心这个方法,你的浏览器会为每一个路由调用重新加载整个页面。

当你有相对URL请求这样的脚本时,不管服务器是什么,只要将它改成
@adeneo,我不敢相信在它前面加上斜杠就能解决问题。