簡體   English   中英

Json.parse 拋出:“語法錯誤:JSON 輸入的意外結束”

[英]Json.parse throws: “SyntaxError: Unexpected end of JSON input”

大家好,stackoverflow 成員,

問題

如標題中所述,我在將字符串解析為 JSON 時遇到問題。

我要解析的字符串由客戶端使用 POST 方法發送到服務器。 請求由服務器上的這個 function 處理:

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 Object 獲取數據來更新我的 MongoDB。 我想我可以只解析在正文中發送的 JSON 字符串並使用它來更新數據庫。 在被困了很長一段時間后,我現在懇請您的建議:)

重要的是要知道
由於我們 uni 項目的限制:不使用 express 或 jquery 之類的任何庫,我要求提供 nativ typescript 解決方案。

我認為字符串有問題,但我無法弄清楚它是什么。 我已經嘗試修剪也無濟於事的空白。

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

我想到了。

問題是我確實從 MDN 復制了 fetch,並在fetch()語句上啟用了 CORS。
啟用 CORS 后,會出現一個預檢請求( CORS 詳細信息),其中有一個選項 header。 我的 Typescript 服務器未配置為接受 CORS 請求(因此無法處理 OPTIONS 標頭)並且確實嘗試使用預檢請求的 udefined 正文。

我在fetch()語句上禁用了 CORS header 。 這導致工作JSON.parse()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM