首页 > 解决方案 > Json.parse 抛出:“SyntaxError:JSON 输入意外结束”

问题描述

大家好,stackoverflow 成员,

问题

如标题中所述,我在将字符串解析为 JSON 时遇到问题。

我要解析的字符串由客户端使用 POST 方法发送到服务器。请求由服务器上的此函数处理:

async function handleReservierung (req: Http.IncomingMessage, res: Http.ServerResponse): Promise<void> {
    res.setHeader("Content-Type", "application/json");
    res.setHeader("Access-Control-Allow-Headers", "content-type");
    res.setHeader("Access-Control-Allow-Origin", "*");

    let body: string = "";
    req.on("data", chunk => {
        body += chunk.toString();
    });
    req.on("end", () => {
        console.log(JSON.parse(body));
        res.end(body);
    });
} 

我已经阅读了传入的 POST 请求以及如何处理它们,并看到了这个解决方案,其中传入的块添加到了变量主体中。到目前为止,一切都很好。

我认为可能没有正确添加块,但console.log(body)它会给我一个完全有效的字符串:

{"ids":["600c4eff6c54c802cc1cac4f","600c4f576c54c802cc1cac51"],"name":"Someons Name"}

就像在 JSON 验证器中测试的那样。
我建立了一个界面

interface Reservierungen {
    ids: number[];
    name?: string;
}

这是在客户端用来填写所有数据然后在请求正文中发送的那个,JSON.stringify(body) 当它现在JSON.parse(body)在服务器上时它会抛出这个错误:

SyntaxError: Unexpected end of JSON input
    at JSON.parse (<anonymous>)
    at IncomingMessage.<anonymous> (C:\Users\felix\Documents\GIS\GIS-WiSe2020_2021\server\index.js:72:26)
    at IncomingMessage.emit (events.js:327:22)
    at endReadableNT (_stream_readable.js:1221:12)
    at processTicksAndRejections (internal/process/task_queues.js:84:21)

为什么我需要解析 JSON?

我想从 JSON 对象中获取数据来更新我的 MongoDB。我以为我可以解析正文中发送的 JSON 字符串并使用它来更新数据库。在被困了很长一段时间后,我现在恳请您的建议:)

重要的是要知道
由于我们 uni 项目的限制:不使用 express 或 jquery 之类的任何库,我要求提供 nativ typescript 解决方案。

我认为字符串有问题,但我无法弄清楚它是什么。我已经尝试修剪也无济于事的空格。

我希望我给了你所有需要的信息。
先感谢您。

标签: node.jsjsontypescriptfetch

解决方案


我想到了。

问题是我确实从 MDN 复制了 fetch 并在fetch()语句上启用了 CORS。启用 CORS 后,会出现一个带有 OPTIONS 标头
的预检请求(CORS 详细信息)。我的 Typescript 服务器未配置为接受 CORS 请求(因此无法处理 OPTIONS 标头)并且确实尝试使用预检请求的 udefined 正文。

我禁用了fetch()语句中的 CORS 标头。这导致了一个工作JSON.parse()


推荐阅读