Javascript 使用Express创建单页应用程序

Javascript 使用Express创建单页应用程序,javascript,node.js,express,Javascript,Node.js,Express,我正在尝试使用React/Redux/Express堆栈创建SPA。我的服务器当前看起来如下所示: import express from 'express' import dotenv from 'dotenv' import path from 'path' dotenv.config() const app = express() app.use(express.static(__dirname + '../client/static/public/')) app.get('*',

我正在尝试使用React/Redux/Express堆栈创建SPA。我的服务器当前看起来如下所示:

import express from 'express'
import dotenv from 'dotenv'
import path from 'path'

dotenv.config()

const app = express()

app.use(express.static(__dirname + '../client/static/public/'))
app.get('*', (req, res) => {
  res.sendFile(path.resolve(__dirname, 
  '../client/static/public/index.html'))
})
app.listen(process.env.PORT)
在我的html中,我有一个带有src=“webpack bundle file的路径”的脚本标记。src返回html文档,而不是捆绑文件的内容。我知道这是因为我的服务器中有一个“全包”路由。我的问题是如何设置路线,以使“一网打尽”不会干扰其他路线?提前谢谢你

编辑:

以下是我的完整HTML:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Backers Online</title>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
  </head>
  <body>
    <div id="root"></div>
    <script src="../build/app.bundle.js"></script>
  </body>
</html>

支持者在线

app.use(express.static(…)
的目的是为给定目录中的文件提供服务出于安全原因,它不提供该目录以外的文件(如
。/build/app.bundle.js
。因此,您应该在有目录可供服务的情况下多次添加它:

app.use(express.static(__dirname + '/../client/static/public/'));
app.use(express.static(__dirname + '/../client/static/build/'));
然后在客户端,您只需请求文件,HTML不知道哪些目录包含这些文件:

<script src="app.bundle.js"></script>

编辑:您在提供服务的目录路径中有一个输入错误。像这样添加一个
/
\uu dirname+'/..'


正如我在评论中所说,如果您显示
\uu dirname
,您会立即看到它。

似乎您正在以正确的顺序使用
express
中间件。你的HTML
src=
看起来像什么?src=“../build/app.bundle.js”@RaphaMexThere。把你的全部HTML,我修复它在一个回答我的答案。发生的情况是服务器正在查看
。/client/static/public/
。此外,出于明显的安全原因,您不能在HTML中使用
。在src加载HTML文件时,仍然会出现相同的错误。Mmmm。。。
。/build/
是相对于
。/client/static/public/
的吗?是的,它是“../client/static/build/”。我更改了您的答案以符合我的路径,但它不起作用。请检查您的
\uu dirname
。它应该已经起作用了。我看不见:)尝试删除结尾
/
,比如:
app.use(express.static(\uu dirname+'../client/static/build')