表达' response.sendFile()发送Uncaught SyntaxError:Unexpected token<

时间:2016-11-03 14:46:08

标签: javascript express reactjs react-router

我在浏览器历史记录中使用react-router。这个功能:

app.get('*', function (request, response){
  response.sendFile(path.join(__dirname + "/public/index.html"))
})

应该发送Index.html,因为路由发生在客户端与react-router。 但不知怎的,我的index.html被服务器误解了,我得到了这个错误:

未捕获的SyntaxError:意外的令牌<

我不知道这里的问题是什么。文件路径错了吗?我的树看起来像这样:

/app
/app/myJavascriptStuff.js
/public
/public/index.html
/moreStuffThatsNotRelevant
/server.js <- my express file

没有上述功能,我的页面通常会回复:

无法获取/无论

在localhost:3000上没有发生的每个页面刷新(例如localhost:3000 /无论如何)

因为我知道我很难描述事物,here是指向存储库的链接。

非常感谢帮助。 :)

2 个答案:

答案 0 :(得分:1)

首先,您没有使用webpack构建bundle.js文件。在你可以服务之前,你需要先建立它。

将package.json脚本更改为

"scripts": {
    "build": "webpack --progress --color --config  webpack.config.js --watch",
    "start": "node server.js"
  }

并在运行服务器之前运行命令npm run build

如果webpack bundle.js没有在/public/build内创建,那么在public中创建一个目录build并再次运行上面的命令。

这可以解决您的问题。

答案 1 :(得分:0)

问题可能是因为即使浏览器要求您提供 bundle.js style.css ,您也会发送 index.html 的每个请求。通过

&#xA;&#xA;
  app.get('*',function(request,response){&#xA; response.sendFile(path.join(__ dirname +“/) public / index.html“))&#xA;});&#xA;  
&#xA;&#xA;

定义 public 文件夹可以提供这些文件的地方,比如public(你的github repo中有index.html)。让webpack在该文件夹中生成 bundle.js 。还要在 index.html 中指向该文件夹中的 bundle.js

&#xA;&#xA;

> server.js 你需要做一些改变。当浏览器询问时,让 express 使用公共路径来提供这些文件。

&#xA;&#xA;

一个例子可以是 -

&#xA; &#xA;
  const app = express();&#xA; const publicPath = express.static(path.join(__ dirname,'public'),{redirect:false});&#xA; &#xA; const indexPath = path.join(__ dirname,'public / index.html');&#xA; app.use(publicPath);&#xA; app.get('/',function(_,res) ){res.sendFile(indexPath)});&#xA; app.get('*',function(_,res){res.sendFile(indexPath)});&#xA;  
&#XA;