2017-08-28 10 views
0

CRUDの操作をアプリケーションで処理するために、PHPAngular 4を使用してWebAppで作業しています。しかし、エラーを処理する場合、私はそれが最良の方法ではないように落ちました。関数エラーを適切に返して処理する方法

これは、私は角の関数を呼んでいる方法です:

createUser(user: any): any { 
    return this._http.post(this.backendUrl, user).map(response => { 
     console.log('Success message: ', response); 
    }).catch(this.handleErrors); 
} 

handleErrors(error: Response): any { 
    console.log('Handle error: ', error); 
} 

例えば、私は一意の電子メールで新しいユーザーを作成したいので、私はチェックして、このPHP機能を持っている、のは、言ってみましょう

$param = [':email' => $email]; 
$check = sql("SELECT 1 FROM users WHERE email = :email", $param); 
if ($check) { 
    return print_r(array(
     'success' => 0, 
     'message' => 'This email is already registered' 
    )); 
} 

// [...Finish the user registration...] 

return print_r(array(
    'success' => 1, 
    'message' => 'Account successfully created!' 
)); 

この方法では、関数が戻るが、私はsuccess値はどちらか10あるかどうかを確認してを使用して、メッセージを表示します:既に登録されている電子メールがある場合例えば、である。しかし、私はこれがこれを行う最良の方法だとは思わない。

私はこのように、PHPの例外を使用しようとしました:

$param = [':email' => $email]; 
$check = sql("SELECT 1 FROM users WHERE email = :email", $param); 
if ($check) { 
    throw new Exception('This email is already registered'); 
} 

しかし、これは問題を解決していません。何が起こるかは、コンソール上のネットワークタブの下の機能をチェックするとエラーになり、関数は成功応答を返しますが、応答はnullです。私はにconsole.logにこのメッセージが表示されます。

成功メッセージ:ヌル


このシナリオを処理するための最良の方法だろうか?ここで、機能がすべての小さな部分を完了し、実際にすべてを正しく実行した場合にのみ成功を返すかどうかを確認したいところです。

+0

を私はあなた 'sql'関数が結果を返すと仮定ブールではありません。もう一つは 'print_r'がboolを返すということです。' print_r( 'foo'、true) 'のように文字列出力のための2番目のパラメータが必要です。最後にjsonを返さないのはなぜですか?最後に、テキストを表示しますか?新しいタブで開く必要があります。私はあなたがPHPでどのようにデータをプルするのかは分かりませんが、 '$ _REQUEST'を使ってプルすると、get paramsを使って出力をテストすることができます – Soundz

+0

PHPが例外を処理する方法はわかりませんが、' null奇妙なことだ。あなたはどれくらいそれを待たなければなりませんか?タイムアウトになりますか? –

+0

@Soundz sql関数からの戻りについては、クエリに応じてObject、arrayまたはfalseにすることができます。私がprint_rメソッドを使用するときは、問題はありません。すべて正常に動作しますが、成功の戻り値が実際に成功したかどうか、関数内で何か問題があったかどうかを確認する必要があります。私は、関数の中の何かがそれを止めることを続ける場合、このケースでエラーをスローするオプションを使用する方法があるかどうかを知りたいと思います。 – celsomtrindade

答えて

1

エラーを示すHTTP-CodesでRXJS-Catchがトリガされます。一般的に、400(Bad Request)のような有用なコードを送ることを推奨します。

PHPのエラーの場合に次の行を追加し、このようなエラーを送信するには:

http_response_code(400); 

は、今ではこのようになります。

if ($check) { 
    http_response_code(400); 
    return print_r(array(
     'success' => 0, 
     'message' => 'This email is already registered' 
    )); 
} 
+1

角度コードでいくつかの設定を変更しなければならなかったので、しばらく時間がかかりました。しかし、それは私が意図したように働いた。ありがとう! – celsomtrindade

関連する問題