SyntaxError:JSON.parse:React 应用程序上 JSON 数据的第 1 行第 1 列的意外字符

Posted

技术标签:

【中文标题】SyntaxError:JSON.parse:React 应用程序上 JSON 数据的第 1 行第 1 列的意外字符【英文标题】:SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data on React app 【发布时间】:2020-01-17 11:58:51 【问题描述】:

我有一个在后端使用 express 的 React 应用程序。我尝试通过 fetch API 调用从我的数据库中获取消息列表。

前端代码:

App.js

getMessages = () => 
fetch('/api/mess')
.then(res => res.json())
.then(res => 
  var Messages = res.map(r => r.messages);
  this.setState( Messages );
);

;

后台代码:

api/mess.js

var express = require('express');
var Mess = require('../queries/mess');

var router = express.Router();

router.get('/', (req, res) => 
        Mess.retrieveAll((err, messages) => 
        if (err)
            return res.json(err);
        return res.json(messages);
    )
);

router.post('/', (req, res) => 
    var message = req.body.message;
    Mess.insert(message, (err, result) => 
        if (err)
            return res.json(err);
        return res.json(result);
    );
);

module.exports = router;

queries/mess.js

const db = require('../database');

class Mess 
    static retrieveAll(callback) 
        db.query('SELECT * FROM mess;', (err, res) => 
            if (err.error) 
                return callback(err);
            callback(res); 
        );
    

    static insert(mess, callback) 
        db.query('INSERT INTO mess (messages) VALUES ($1)', [mess], (err, res) => 
            if (err.error)
                return callback(err);
            callback(res);
        );
    


module.exports = Mess;

index.js

const path = require('path');
const express = require('express');
const bodyParser = require('body-parser');

var db = require('./database');

const ENV = process.env.NODE_ENV;
const PORT = process.env.PORT || 3011;

const app = express();
app.use(express.json());
app.use(express.urlencoded( extended: false ));
app.use(bodyParser.json());

app.use('/api/mess', require('./api/mess'));
app.use('/api/roles', require('./api/roles'));

app.listen(PORT, () => 
  console.log(`Server listening on port $PORT...`);
);

module.exports = app;

我在前端收到此错误:

SyntaxError:JSON.parse:JSON 数据的第 1 行第 1 列出现意外字符

我已经尝试并更改了每个响应和请求以使用 JSON.parse 或 .json 并且无论如何我都会收到相同的消息。

当我使用浏览器并转到 api 通道时,我会得到一个格式正确的 JSON,其中包含 db 的内容。

我错过了什么吗?

编辑:

堆栈跟踪非常小:

当我尝试时:

getMessages = () => fetch('/api/mess') .then(res => console.log(res)); ;

我得到了这个对象:

【问题讨论】:

试试 JSON.parse(data); 控制台中的东西看起来不错 - 我猜它已经在内部被解析为 JSON,或者在途中的某个地方..当你尝试 JSON.parse 一个已经解析的有效对象时,你'会得到那个错误 - 尝试在不调用 .json 或任何内容的情况下记录它。我猜想尝试找出你试图在 FE 上解析它的位置:'.then(res => res.json())' 你能提供堆栈跟踪吗? 当我删除该行时, res.map(r => r.messages) 函数给了我 Unhandled Rejection (TypeError): res.map is not a function 【参考方案1】:

问题是后端在PORT 3011,而api调用是从前端到PORT 3000的。

我需要一个代理来从前端指向后端端口。

我需要在client/package.json (Frontend) 里面添加这一行:

"proxy": "http://localhost/3011"

【讨论】:

以上是关于SyntaxError:JSON.parse:React 应用程序上 JSON 数据的第 1 行第 1 列的意外字符的主要内容,如果未能解决你的问题,请参考以下文章

SyntaxError:JSON.parse:JSON 的第 1 行第 2 列出现意外字符

SyntaxError:JSON.parse:意外字符在我的控制台中?

我在使用 JSON.parse 时收到“SyntaxError: Unexpected token ' in JSON at position 1”

未捕获的 SyntaxError:JSON.parse (<anonymous>) 处的 JSON 输入意外结束

DiscordJS + NodeJS:SyntaxError:JSON.parse 处的 JSON 输入意外结束(<anonymous>)

SyntaxError:JSON.parse (<anonymous>) 处的 JSON 输入意外结束