node.js - 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 解决方案。
我认为字符串有问题,但我无法弄清楚它是什么。我已经尝试修剪也无济于事的空格。
我希望我给了你所有需要的信息。
先感谢您。
解决方案
我想到了。
问题是我确实从 MDN 复制了 fetch 并在fetch()
语句上启用了 CORS。启用 CORS 后,会出现一个带有 OPTIONS 标头
的预检请求(CORS 详细信息)。我的 Typescript 服务器未配置为接受 CORS 请求(因此无法处理 OPTIONS 标头)并且确实尝试使用预检请求的 udefined 正文。
我禁用了fetch()
语句中的 CORS 标头。这导致了一个工作JSON.parse()
推荐阅读
- react-native - React-Native-Firebase:发生网络错误(如超时、连接中断或主机无法访问)
- python - 带有 Django 功能的 HTML 按钮 onclick 操作
- css - 打字机效果布局不是内联的
- c++ - 何时使用函数完全特化而不是重载
- php - 如何在 mysql 中存储可编辑的定义常量 web 设置
- django - 在 django 中获取 OperationalError
- python - 如何在函数的最后一个字母后加上点
- ms-access - 仅格式化表格的第一行
- javascript - 如何在正则表达式中定义“不区分大小写”修饰符 i?
- scripting - 适合带有垂直对齐选项的框架