12

firebase-cloud-functionsを使用するfirebaseアプリケーションを作成しています。Firebase Cloudの関数でBad JSONを処理する方法は?

index.js

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

これは非常に単純な関数です。いくつかのペイロードでエンドポイントにPOSTリクエストを作成したいと思います。私は​​

{ 
    "phoneNumber: "9632725300" 
} 

だけでクラッシュしたサーバとFirebaseクラウド機能エミュレータと郵便配達を使用してAPIをテストしたときに!私の質問は、これらのようなfirebase関数の悪い要求をどう処理するかです。サーバがクラッシュしませんでした。このエラー enter image description here

+1

受けるべきJSONの有効なフォーマットだ「サーバーだけでクラッシュしましたの!」どのようにサーバーがクラッシュしましたか?エラーメッセージとは何ですか? –

答えて

5

。あなたはそれに悪いリクエスト(不正な形式のJSON)を送ってきました。そしてそれは "悪い要求"であるステータスコード400で完全に応答しました。

あなたはむしろあなたのJSONを修正したい...

EDIT:あなたが本当に無効なJSONを送信できるようにしたい場合

、あなたはJSONボディパーサーを回避することによってそれを行うことができます。これを行うには、content-typeヘッダーを "text/plain"に設定するようリクエストを変更するか、このコンテンツタイプは、JSONを解析しないテキスト本文パーサーを使用します。

このようにすると、JSONの構文解析を処理する必要がありますが、try-catchを使用してエラーを自分自身で処理できることに注意してください。 https://firebase.google.com/docs/functions/http-events

1

から撮影

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

あなたは経験している何を実際にサーバがクラッシュではありません。実際、技術的には、クラウド機能を使用することでクラッシュするサーバーがなくなります。 (For this reason they're called "Serverless Infrastructure")クラウド機能で実行するリクエスト/操作は、まったく新しいサーバーのようなものです。クラウド機能については、実際には素晴らしいものです。 (これはあまり単純化された説明で、深い説明のためにもう少し詳しくお読みになることをお勧めします)

JSONを入手したかどうかを理解しようとしています無効(不良)かどうか。時には、たまに、私は外部サービスの束を接続しなければならないことはほとんどありませんが、ときどきクラウド関数が解析できない悪いJSONを返すので、エラーがスローされます。このヘルパー関数で

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の多くに対処する必要がある場合:

ソリューションは、別の関数と、このようなtry/catchブロックにして、あなたのJSON.parseを置くことですあなたが解析しようとしているJSONが良いかどうかを簡単に判断することができます。そうでない場合は、少なくともあなたのやり方でエラーを処理できます。

・ホープ、このことができます:)

0

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

をスクリーンショットから、私はJSONが無効または不正な形式であることがわかります。改行(\ n)とタブスペース(\ t)文字が含まれています。また、キー "phoneNumber"は二重引用符で囲まれていないため、JSONは再び無効になります。

はここで、サーバが

{ 
    "phoneNumber": "9632725300" 
} 
関連する問題