12

Ich erstelle eine Firebase-Anwendung, die Firebase-Cloud-Funktionen verwendet.Umgang mit Bad JSON in Firebase Cloud-Funktionen?

index.js

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

Dies ist sehr einfach Funktionen. Ich möchte eine POST Anfrage auf dem Endpunkt mit etwas Payload machen. Als ich mit bad json

{ 
    "phoneNumber: "9632725300" 
} 

Der Server nur abgestürzt mithilfe der API Firebase Cloud-Funktion Emulator und Postbote getestet! Meine Frage ist, wie man die schlechte Anfrage in Firebase-Funktionen wie diese behandelt.

mit diesem Fehler enter image description here

+1

erhalten sollten "Der Server nur abgestürzt!" Wie ist der Server abgestürzt? Was ist die Fehlermeldung? –

Antwort

5

Der Server nicht abstürzen. Sie haben eine ungültige Anfrage gesendet (fehlerhafte JSON) und sie hat perfekt mit einem Statuscode 400 "Bad Request" geantwortet.

Sie würden eher korrigieren Sie Ihre JSON ...

EDIT:

Wenn Sie wirklich in der Lage sein wollte ungültige JSON zu schicken, können Sie die JSON-Parser Körper tun, so könnte durch zu umgehen. Um dies zu tun, können Sie Ihre Anfrage so ändern, dass ein Content-Type-Header auf "text/plain" gesetzt wird. Dieser Inhaltstyp verwendet den Text-Body-Parser, der JSON nicht analysiert.

Beachten Sie, dass Sie dabei die JSON-Analyse selbst durchführen müssen, aber mit einem try-catch umgehen können.

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

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

1

Was Sie erleben Absturz nicht wirklich ein Server ist. Tatsächlich haben Sie technisch gesehen durch die Verwendung von Cloud-Funktionen keinen Server zum Absturz. (For this reason they're called "Serverless Infrastructure") Jede Anfrage/Operation, die Sie in den Cloud-Funktionen ausführen, ähnelt einem brandneuen Server. Was ist eigentlich das Beste an Cloud-Funktionen im Allgemeinen? (Dies ist eine übermäßig vereinfachte Erklärung, würde ich vorschlagen, ein wenig mehr darüber für eine bessere eingehende Erklärung zu lesen)

Das gesagt, von dem, was ich verstehe, Sie versuchen herauszufinden, ob der JSON Sie haben ist ungültig (schlecht) oder nicht. Gelegentlich, wenn ich eine Reihe von externen Diensten anschließe, geben sie selten, aber manchmal, einen schlechten JSON zurück, den meine Cloud-Funktionen nicht analysieren können. Daher wird ein Fehler ausgegeben.

Die Lösung ist Ihr JSON.parse in eine separate Funktion und einem try/catch-Block wie folgt zu setzen:

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

Mit dieser Hilfsfunktion, wenn Sie mit einer Menge von externen JSON zu tun haben Ressourcen, können Sie leicht feststellen, ob der JSON, den Sie analysieren möchten, gut ist, und wenn nicht, können Sie den Fehler auf Ihre Art behandeln.

this helps :)

0

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

Aus dem Screenshot, ich sehe, dass die JSON ungültig oder fehlerhaft ist. Es enthält Zeilenvorschubzeichen (\ n) und Tabulatorzeichen (\ t).Außerdem ist der Schlüssel "phoneNumber" nicht in doppelte Anführungszeichen eingeschlossen, was wiederum den JSON ungültig macht.

Hier ist ein gültiges Format des JSON, dass der Server

{ 
    "phoneNumber": "9632725300" 
} 
Verwandte Themen