503エラーの原因を取り除く特別なケースがあります。次のコードスニペットは、私のAPIコールがこのAPIエンドポイントに行われた場合と全く結果が制御移行を発見したときにシステムがどの結果処理503特にTryCatchの場合のExpress/Node.jsのエラー
app.post('/api/fetch/user', function(req, res){
var email = req.body.emailTxt;
db.one('SELECT * FROM users WHERE email=$1', [email])
.then(function(data){
console.log('DATA:', data);
var userCard = { id: data.user_id, name: data.user_name,
email: data.email, regDate: data.date_created };
res.status(200).json({ 'valid': true, '_payload': userCard });
})
.catch(function(error){
if(error.search(/No data returned from the query/im) > 0) // regex case insensitive search and search multiline as source string is multiline
res.status(500).send('Invalid Request Match');
else
res.status(500).send('ERROR: '+error);
})
});
を見つけることができないときに実行さcatch文を持っていますcatch()
にありますが、それは奇妙ですが、かなり奇妙なことに、503 - Request timeout
エラーを返します。 デバッグするためにif()
の条件を削除しようとしましたが、if-else
がExpressJで動作していないように見えます。
注:すべてが正常に機能し、制御が.then()
にある場合でも動作します。 if,else
を削除して単純なエラー表示/応答を返すと、すべて正常に動作します。私のAPIには特別なものは何も含まれていません。私はAPIをテストするために準備した単一のページスクリプトです。
一つのタイプミスしかし、あなたが言及した 'catch'は、機能を取り、唯一のパラメータを渡すことができますしません。 はい、正しい方向を指していますが、 'error'には' .search() 'がありません。この場合、エラーメッセージ文字列を解析するにはどうすればよいですか?コンソール(マルチライン)でエラーが表示されます。 'エラー:QueryResultError { code:queryResultErrorCode.noData message:"クエリから返されたデータがありません。" 受信:0 クエリ:" SELECT * FROM users where email = '[email protected]' AND password = '1234' "} –
Hurrey !!あなたの指示に従って問題を解決しました。 'error.toString();'を使用して文字列へのオブジェクトは '.toString()'としてグローバルメソッドであり、私のために働いています –
データベースが適切な 'QueryResultError'を返すので、 'catch'ブロックエラーを処理するためのより良いアプローチで答えを編集しました。 – iKoala