【发布时间】:2018-11-16 12:51:19
【问题描述】:
我正在开发一个 React 项目,在遇到此处描述的问题后:React-router urls don't work when refreshing or writting manually 我实施了该链接中建议的“Catch-All”解决方案。
app.use("/", express.Router());
app.get("*", function (req, res) {
res.sendFile(path.resolve(__dirname + "/../build/index.html"));
});
这解决了我令人耳目一新的问题,但它破坏了我所有的fetch 呼叫。例如:
fetch("http://localhost:3000/api/login", {
method: "GET",
headers: {
"username": user.value,
"password": pass.value,
}
})
.then(response => response.json())
.then(function(data) {
console.log(data)
})
如果我注释掉上面的 app.use 和 app.get 行,这会很好,这会给我一个错误:
Uncaught (in promise) SyntaxError: Unexpected token < in JSON at position 0
我认为 response.json() 返回的承诺被拒绝,基于我所做的一些 console.log 调试。但是,无论我是否注释掉这些行,response 似乎都是一样的。所以我不确定它为什么会失败。
【问题讨论】:
-
您的回复实际上是一个 html 文件吗?如果它是 html,你为什么要把它读成
json? -
您的服务器正在返回一个 HTML 文件(以
<作为其第一个字符(位置 0)开始),但您的客户端代码需要 JSON。它试图将 HTML 解析为 JSON,因此出现错误。
标签: javascript node.js reactjs express fetch