建立我的项目后。我注意到构建应用程序后出现此错误。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错误消息。来源: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)
}
})
});
您必须将通用路由器/*
放在最后,因此仅当路由不是/api/global_rankings
时才执行。>
app.get('/api/global_rankings', function(request, response) { ... }
app.get('/*', function(req, res) { ... });