你好,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 对象中获取数据来更新我的 MongoDB。我以为我可以解析正文中发送的 JSON 字符串并使用它来更新数据库。在被困了很长一段时间后,我现在恳请您的建议:)
重要须知
由于我们 uni 项目的限制:不使用任何像 express 或 jquery 这样的库,我要求使用 nativ typescript 解决方案。
我认为字符串有问题,但我不知道它是什么。我已经尝试过修剪也无济于事的空格。
我希望我给了你所有需要的信息。
提前致谢。
答案 0 :(得分:0)
我想通了。
问题是我确实从 MDN 复制了 fetch 并在 fetch()
语句上启用了 CORS。
启用 CORS 后,会出现一个带有 OPTIONS 标头的预检请求 (CORS Details)。我的 Typescript 服务器被配置为接受 CORS 请求(因此无法处理 OPTIONS 标头)并尝试使用预检请求的 udefined 正文。
我在 fetch()
语句中禁用了 CORS 标头。这导致了一个有效的 JSON.parse()