未捕获(在承诺中)语法错误:仅在获取请求页面上的 JSON 中位置 0 处出现意外的令牌<



在构建我的项目之后。我注意到在构建应用程序后出现了此错误。Uncaught (in promise) SyntaxError: Unexpected token < in JSON at position 0

只有当我使用get请求时,才会在页面上收到此错误消息。

我的服务器代码看起来像这个

app.get('/*', function(req, res) {
res.sendFile(path.join(__dirname, 'build/index.html'), function(err) {
if (err) {
res.status(500).send(err)
}
})
});
app.get('/api/global_rankings', function(request, response){
pool.connect((err, db, done) => {
if(err){
return response.status(400).send(err);
}
else{
db.query("some query", function(err, table){
done();
if(err){
return response.status(400).send(err);
}
else{
response.status(201).send({value: table.rows});
}
});
}
});
});

我注意到,如果我删除第一个get请求,我的第二个get请求会很好。不过,我需要第一个get请求,否则在页面未刷新时会收到get错误消息。来源:https://tylermcginnis.com/react-router-cannot-get-url-refresh/

有什么办法我能解决这个问题吗?

谢谢

您正在得到一个响应,第一个字符是<,我保证它是<html>标记,因为您正在取回HTML并试图将其解析为JSON。

如果您删除第一个请求,它之所以有效,是因为*匹配任何请求,包括/api/global_rankings,所以当您同时拥有这两个方法时,它匹配*并返回错误页面。

切换方法顺序,看看它是否像你想要的那样工作,然后:

app.get('/api/global_rankings', function(request, response){
pool.connect((err, db, done) => {
if(err){
return response.status(400).send(err);
}
else{
db.query("some query", function(err, table){
done();
if(err){
return response.status(400).send(err);
}
else{
response.status(201).send({value: table.rows});
}
});
}
});
});
app.get('/*', function(req, res) {
res.sendFile(path.join(__dirname, 'build/index.html'), function(err) {
if (err) {
res.status(500).send(err)
}
})
});

您必须将catch-all路由器/*放在最后,这样它只有在路由不是/api/global_rankings:时才执行

app.get('/api/global_rankings', function(request, response) { ... }
app.get('/*', function(req, res) { ... });

最新更新