12

我正在創建一個使用firebase-cloud-functions的firebase應用程序。如何在Firebase雲端函數中處理錯誤的JSON?

index.js

exports.auth = functions.https.onRequest((request, response) => { 
    response.status(200).send({ 
    status : "Some Status" 
    }); 
} 

這是非常簡單的功能。我想在具有一些有效負載的端點上發出POST請求。當我測試用火力地堡雲功能仿真器和郵遞員的API與​​

{ 
    "phoneNumber: "9632725300" 
} 

服務器剛剛墜毀!我的問題是如何處理這些firebase函數中的錯誤請求。

與此錯誤 enter image description here

+1

的JSON的有效形式「只是崩潰的服務器!」服務器如何崩潰?什麼是錯誤信息? –

回答

5

的服務器沒有崩潰。您發送了一個錯誤的請求(格式錯誤的JSON),並且它完美地響應了狀態碼400,該狀態碼是「錯誤的請求」。

你寧願糾正你的JSON ...

編輯:

如果你真的希望能夠發送無效JSON,你可以繞開JSON解析器身體這樣做。爲此,您可以更改請求以將內容類型標頭設置爲「text/plain」。這種內容類型將使用文本主體解析器,它不會解析任何JSON。

請注意,這樣做需要您自己處理JSON解析,但是可以使用try-catch來處理錯誤。

let json; 
try { 
    json = JSON.parse(json); 
} catch (e) { 
    // Handle JSON error. 
} 

https://firebase.google.com/docs/functions/http-events

1

採取什麼您遇到並不是一個真正的服務器崩潰。事實上,從技術上講,通過使用雲功能,您不會有服務器崩潰。 (For this reason they're called "Serverless Infrastructure")您在Cloud Functions上執行的每個請求/操作都有點像全新的服務器。一般來說,這對雲功能來說真的很棒。 (這是一個過於簡單的解釋,我建議閱讀更多關於它的更好的深入解釋)

這就是說,從我理解你想弄清楚如果你得到的JSON無效(壞)與否。偶爾,當我必須連接一堆外部服務時,很少,但有時候,他們會返回一個我的雲端函數無法解析的錯誤JSON,因此會引發錯誤。

解決的辦法是把你的JSON.parse在一個單獨的功能和try/catch塊這樣的:

function safelyParseJSON (json) { 
    var parsed; 

    try { 
    parsed = JSON.parse(json); 
    } catch (e) { 
    // BAD JSON, DO SOMETHING ABOUT THIS HERE. 
    } 

    return parsed; // will be undefined if it's a bad json! 
} 

function doSomethingAwesome() { 
    var parsedJSON = safelyParseJSON(data); 
    // Now if parsedJSON is undefined you know it was a bad one, 
    // And if it's defined you know it's a good one. 
} 

有了這個輔助函數,如果你要處理大量的外部JSON的資源,您可以輕鬆確定您要解析的JSON是否良好,如果不是,您至少可以按照自己的方式處理錯誤。

希望這有助於:)

0

{\n\t"phoneNumber: "9632725300"\n}

從截圖,我看到JSON是無效或格式錯誤。它包含換行符(\ n)和製表符空格(\ t)字符。此外,關鍵字「phoneNumber」未包含在雙引號中,這又使JSON失效。

這裏的服務器應該接受

{ 
    "phoneNumber": "9632725300" 
}