簡體   English   中英

Node.js - https.get() 和 JSON.parse() 使服務器崩潰

[英]Node.js - https.get() and JSON.parse() crash the server

我已經上傳了一個測試應用程序。

不幸的是,服務器崩潰了。

這是導致服務器崩潰的代碼片段:

https.get(`https://www.instagram.com/${username}/?__a=1`, resp => {
            resp.on('data', chunk => data.push(chunk));
            resp.on('end', () => {
                var json = JSON.parse(data.join(''));
                done(json.graphql.user);
            });
        });

這是錯誤消息:

SyntaxError: Unexpected end of JSON input at JSON.parse (<anonymous>)
 at IncomingMessage.resp.on (/app/app/routes.js:108:33)
 at IncomingMessage.emit (events.js:203:15)
 at endReadableNT (_stream_readable.js:1145:12)
 at process._tickCallback (internal/process/next_tick.js:63:19)
State changed from up to crashed.

代碼在JSON.parse()上崩潰,但我認為https.get()行存在一些錯誤。 不幸的是,我不明白出了什么問題,我正在研究這個問題好幾天。

編輯:更奇怪的是,有時這段代碼可以正常工作,有時它會使服務器崩潰。 我的意思是對於特定的用戶名它可以工作,但對於同一個用戶名它又不能。

據我所知,這是由於過多地執行這些請求造成的。 您可以通過簡單地執行data.join("") === ""來檢查它是否是有效響應 - 適用於所有內容,除了無效用戶 - 為此,您可以檢查data.join("").startsWith("<!DOCTYPE html>")

這是因為當您被限制時,響應只是空的,而當用戶無效時,它是一個以<!DOCTYPE html>開頭的網站的 HTML 內容,這使我們可以輕松地檢查它。

檢查數據是否有效

if(data.join("") === "" || data.join("").startsWith("<!DOCTYPE html>")) {
    console.log("Invalid data!")
}

檢查它是否是無效用戶或您是否受到限制

if(data.join("") === "") {
    // throttled
} else if(data.join("").startsWith("<!DOCTYPE html>")) {
    // invalid user
} else {
    // valid data and user
}

幾乎完整的代碼

https.get(`https://www.instagram.com/${username}/?__a=1`, resp => {
    let data = [];
    resp.on('data', chunk => data.push(chunk));

    resp.on('end', () => {

        if(data.join("") === "") {
            // You are being throttled - handle it
        } else if(data.join("").startsWith("<!DOCTYPE html>")) {
            // The user is invalid - handle it
        } else {
            // Everything is OK
            const json = JSON.parse(data.join(''));
            done(json.graphql.user);
        }
    });
});

暫無
暫無

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

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