12

Tworzę aplikację firebase wykorzystującą funkcje chmury ogniowej.Jak radzić sobie z Bad JSON w Firebase Cloud Functions?

index.js

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

To bardzo proste funkcje. Chcę wykonać żądanie z punktu końcowego z pewnym ładunkiem. Kiedy testowaliśmy API korzystając Firebase Chmura Emulator funkcji oraz listonosz z bad json

{ 
    "phoneNumber: "9632725300" 
} 

Serwer po prostu rozbił! Moje pytanie brzmi: jak obsłużyć złe żądanie w takich funkcjach firebase jak te.

z tym błędem enter image description here

+1

„Serwer po prostu uszkodzony!” Jak doszło do awarii serwera? Co to jest komunikat o błędzie? –

Odpowiedz

5

Serwer nie wieszać. Wysłałeś to złe żądanie (źle sformułowane JSON) i odpowiedział idealnie z kodem statusu 400, który jest "Bad Request".

Wolisz poprawić JSON ...

EDIT:

Jeśli naprawdę chciał, aby móc wysłać nieprawidłową JSON, można to zrobić przez obejście parsera JSON ciała. Aby to zrobić, możesz zmienić swoją prośbę, aby nagłówek typu zawartości był ustawiony na "text/plain". Ten typ zawartości użyje parsera tekstowego ciała, który nie będzie parsować żadnego JSON-a.

Pamiętaj, że wykonanie tej czynności będzie wymagać obsługi samego JSON, ale pozwoli samodzielnie poradzić sobie z błędem za pomocą try-catch.

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

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

1

czego doświadcza rzeczywistości nie jest awaria serwera. W rzeczywistości, dzięki technice Cloud Functions, nie masz serwera do awarii. (For this reason they're called "Serverless Infrastructure") Każde żądanie/operacja, którą wykonujesz w Cloud Functions, przypomina zupełnie nowy serwer. Co tak naprawdę jest fantastyczne w Cloud Functions w ogóle. (Jest to zbyt uproszczone wyjaśnienie, sugeruję przeczytanie nieco więcej na ten temat, aby uzyskać dokładniejsze wyjaśnienie)

Z tego co rozumiem, próbujesz ustalić, czy JSON masz jest nieprawidłowy (zły) lub nie. Czasami, gdy muszę podłączyć szereg usług zewnętrznych, rzadko, ale czasami zwracają zły JSON, którego moje funkcje chmurowe nie mogą przeanalizować, a zatem zgłasza błąd.

Rozwiązaniem jest umieścić JSON.parse do osobnej funkcji i try/catch bloku tak:

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. 
} 

pomocą tej funkcji pomocnika, jeśli masz do czynienia z dużą ilością zewnętrznych JSON zasobów, możesz łatwo określić, czy JSON, który próbujesz analizować, jest dobry, a jeśli nie, możesz przynajmniej poradzić sobie z błędem na swój sposób.

Nadzieja to pomaga :)

0

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

Z zrzucie, widzę, że JSON jest nieprawidłowy lub źle sformułowany. Zawiera znaki nowego wiersza (\ n) i tabulatora (\ t).Ponadto klucz "numer telefonu" nie jest zawijany w podwójne cudzysłowy, co ponownie unieważnia JSON.

Oto poprawny format JSON, że serwer powinien otrzymywać

{ 
    "phoneNumber": "9632725300" 
} 
Powiązane problemy