2016-06-14 18 views
1

私はセイルフレームワーク上でcoモジュールを使用してコーディングしています。Node.jsのcoモジュールを使用して例外をキャッチするにはどうすればよいですか?

InvalidErrorをキャッチしたいと思いますが、エラーログに 'undefined'と表示されます。

このコードを修正するにはどうすればよいですか?

CoモジュールはErrorTypeの仕様をキャッチできませんか?

detail: function (req, res) { 
    co(function *() { 
    let errors = []; 
    const text = req.param('text'); 

    if (text.length <= 0) { 
     throw new InvalidError('text is required'); 
    } 

    }).catch((InvalidError, err) => { 
    sails.log.warn(err); 
    errors.push(err.message); 
    req.flash('errors', errors); 
    res.redirect('/somewhere/view'); 
    }).catch((Error, err) => { 
    sails.log.error(err); 
    res.serverError(err); 
    }); 
} 

エラーログがcatch方法はただ一つの引数を取り、ここで

warn: undefined 
error: undefined 
error: Sending empty 500 ("Server Error") response 

答えて

1

です:err。お試しください:

.catch(err => { 
    sails.log.warn(err); 
    errors.push(err.message); 
    req.flash('errors', errors); 
    res.redirect('/somewhere/view'); 
}) 
+0

ありがとうございました!私はそれを試してみます! –

1

あなたはBluebirdを使用していませんか? standard catch methodにはerror type filteringが含まれていません。あなた自身でそれを行う必要があります。

.catch(err => { 
    if (err instanceof InvalidError) { 
    sails.log.warn(err); 
    errors.push(err.message); 
    req.flash('errors', errors); 
    res.redirect('/somewhere/view'); 
    } else if (err instanceof Error) { 
    sails.log.error(err); 
    res.serverError(err); 
    } else { 
    console.error("You've thrown a non-error! Shame on you!"); 
    } 
}); 
+0

アドバイスをいただきありがとうございます!私はBluebirdを使用しています。ブルーバードを使用している場合は、他のオプションを選択できますか? –

+0

さて、あなたはBluebirdを使っているかもしれませんが、 'co'はそうではありません:-)グローバルな' Promise'変数をBluebirdの実装で上書きするか、 'co(...)'によって返された約束をBluebird 1つは、[ここ](http://stackoverflow.com/a/24315410/1048572)と[there](http://stackoverflow.com/a/30934440/1048572) – Bergi

関連する問題