2016-09-05 1 views
0

ノードを使用して安らかなAPIを作成し、応答を送信中に混乱しました。以下は 応答を送信し、nodejsのコードのさらなる実行を停止します

はサンプルコードです:私は失敗したモバイル検証応答時のリターンを指定していないとき、それは、コードのさらなる実行を継続して印刷コンソールで「データが定義されていない」は無効なモバイルメッセージJSONがある

router.post('/', function(req, res) { 

    var mobileRegex=/^\d{10}$/; 

    if (!mobileRegex.test(req.body.mobile)){ 
     res.json({status:'success',type:false,msg:'Invalid Mobile'}); 
     // I dont want further execution of code after this but still it continues and prints data not defined 
     // OR 
     return res.json({status:'success',type:false,msg:'Invalid Mobile'}); 
     //but works if I specify return before it 
    } 
    var data={...}; 
    signupModel.createUser(data,function(err,result){ 
    if(err) 
     { 
     res.json({status:'success',type:false,msg:'....'}); 
     } 
     else 
     { 
     res.json({status:'success',type:false,id:'....'}); 
     } 
}); 

エラートレースなしでクライアントに適切に送信します。

私は混乱しています。nodejsにapiを作成するときに従うべき正しい方法は何ですか?私の懸念は、応答が送信されるとさらに処理されるべきではありません。 また、リターンが終了した場合、すべてのケースでクライアントにjson応答を送信すると、どこでもリターンを使用する必要があります。

私はNodejs difference between 'res.json(..)' and 'return res.json(..)'スレッドが、ミドルウェアとの関係を見ていたが、私の場合、あなたはres.json()returnステートメントを追加することができますどれ

+0

他のミドルウェアの実行を停止したい場所でリターンを使用してください!そして、res.send()の後に呼び出す必要はありません。単に 'return res.send()'が機能するだけです! – Ali

答えて

0

はありません。 res.json()は単に応答を設定します。それは応答を送信しません。

if (!mobileRegex.test(req.body.mobile)){ 
    return res.json({status:'success', type:false, msg:'Invalid Mobile'}); 
} 
+0

res.jsonは結局res.sendを呼び出すがcontent-typeを設定するので、クライアントに送信するそれぞれのjsonレスポンスの後にreturnを指定すると正しいです。 – Vibhas

+0

正しい。しかし、どこにも返品を加える必要はありません。たとえば、現在のコードでは、後で何も実行されないため、 'if-else'にres.json()の後にリターンを追加する必要はありません。 –

関連する問題