CRUD
の操作をアプリケーションで処理するために、PHP
とAngular 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
値はどちらか1
か0
あるかどうかを確認してを使用して、メッセージを表示します:既に登録されている電子メールがある場合例えば、である。しかし、私はこれがこれを行う最良の方法だとは思わない。
私はこのように、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にこのメッセージが表示されます。
成功メッセージ:ヌル
このシナリオを処理するための最良の方法だろうか?ここで、機能がすべての小さな部分を完了し、実際にすべてを正しく実行した場合にのみ成功を返すかどうかを確認したいところです。
を私はあなた 'sql'関数が結果を返すと仮定ブールではありません。もう一つは 'print_r'がboolを返すということです。' print_r( 'foo'、true) 'のように文字列出力のための2番目のパラメータが必要です。最後にjsonを返さないのはなぜですか?最後に、テキストを表示しますか?新しいタブで開く必要があります。私はあなたがPHPでどのようにデータをプルするのかは分かりませんが、 '$ _REQUEST'を使ってプルすると、get paramsを使って出力をテストすることができます – Soundz
PHPが例外を処理する方法はわかりませんが、' null奇妙なことだ。あなたはどれくらいそれを待たなければなりませんか?タイムアウトになりますか? –
@Soundz sql関数からの戻りについては、クエリに応じてObject、arrayまたはfalseにすることができます。私がprint_rメソッドを使用するときは、問題はありません。すべて正常に動作しますが、成功の戻り値が実際に成功したかどうか、関数内で何か問題があったかどうかを確認する必要があります。私は、関数の中の何かがそれを止めることを続ける場合、このケースでエラーをスローするオプションを使用する方法があるかどうかを知りたいと思います。 – celsomtrindade