【发布时间】:2021-05-01 10:29:26
【问题描述】:
大家好,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 解决方案。
我认为字符串有问题,但我不知道它是什么。我已经尝试修剪没有帮助的空格。
我希望我给了你所有需要的信息。
提前谢谢你。
【问题讨论】:
-
console.log(body)可能会省略不可打印的内容,例如空终止符。你确定字符串中没有你在这里看不到的垃圾吗? -
经过一番研究,我确实发现了问题所在。 JSON 字符串仅在预检请求未定义后才打印出来。于是服务器尝试
JSON.parse(undefined),导致报错。感谢您的帮助。
标签: node.js json typescript fetch