0

作成中のリクエストがあり、JSON 本文が返されます。応答に含まれる可能性のあるさまざまな応答と値をマッピングしました。JSONを吐き出そうとしています。

ほとんどの API は一度に 1 つのエラーしか吐き出さないことを認識していますが、フォーム検証のエラー メッセージ (例: char の長さ、char、既に取得されたもの) について考える場合、それらのエラーをすべて一度に表示したい場合は、それらの API を使用することをお勧めします。それらを一度に1つずつ取得するのは面倒です。

私の質問は次のとおりです。ネストされたステートメントまたは長い if ステートメントを委任するための合理的でクリーンな方法はありますか?

条件ステートメントの配列またはオブジェクトを使用できますか? これを実行できるモジュールはありますか?

var output = {};
output.errors = [];

request(options, function(err, response, body){
    if(err){
        output.errors.push("request error ["+err.message+"]");
    }else{

        if((typeof request !== "undefined") && response && dotty.exists(response, "statusCode") && response.statusCode !== 200){
                output.errors.push("response status code "+response.statusCode);
        }

        if((typeof body !== "undefined") && body){
            if(dotty.exists(body, "countryCode") &&  dotty.exists(body, "countryName") &&  body.countryCode == "-" && body.countryName == "-"){
                output.errors.push("no country code or name present in response");
            }else if(body && dotty.exists(body, "countryCode") &&  body.countryCode == "-" &&  body.countryCode !== "" ){
                output.errors.push("no country code in response");
            }else if(body && dotty.exists(body, "countryName") && body.countryName == "-" &&  body.countryCode !== "" ){
                output.errors.push("no country name in response");
            }

            if(dotty.exists(body, "statusCode") && body.statusCode == "ERROR"){
                output.errors.push(body.statusCode);
            }

            if(dotty.exists(body, "countryCode") &&  body.countryCode !== "-" &&  body.countryCode !== "" ){
                if(!dotty.exists(output,"country")) output.country = {};
                output.country.code = body.countryCode;
            }

            if(dotty.exists(body, "countryName") &&  body.countryName !== "-" &&  body.countryCode !== "" ){
                if(!dotty.exists(output,"country")) output.country = {};
                output.country.name = body.countryName;
            }            
        }else{
            output.errors.push("no body");
        }
    }
    if(output.errors.length == 0) output.errors = false;
    res.jsonp(output);
}

この種の狂気の限界は何ですか?

4

1 に答える 1

0

私は asyncと呼ばれる非常に優れた関数を持つノード モジュールasyncwaterfall()を使用しました。これは、プロセスで行われているすべてのことを区分化するのに役立ちました。

于 2013-02-27T22:51:20.703 に答える