未捕获(承诺中)SyntaxError:意外令牌

问题描述 投票:0回答:2

建立我的项目后。我注意到构建应用程序后出现此错误。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/

有什么办法可以解决这个问题?

谢谢

javascript node.js reactjs
2个回答
0
投票

您正在获得响应,并且第一个字符是<,我保证这是一个<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)
      }
    })
});

0
投票

您必须将通用路由器/*放在最后,因此仅当路由不是/api/global_rankings时才执行。>

app.get('/api/global_rankings', function(request, response) { ... }

app.get('/*', function(req, res) { ... });
    
© www.soinside.com 2019 - 2024. All rights reserved.