我正在使用PHP
和Angular 4
处理WebApp,以处理应用程序上的CRUD
操作。然而,当涉及到处理错误时,我觉得这不是最好的做事方式。
这就是我调用Angular上的函数的方法:
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
,并使用alert()
显示消息。但我认为这不是最佳/正确的做法。
我尝试使用PHP异常,如下所示:
$param = [':email' => $email];
$check = sql("SELECT 1 FROM users WHERE email = :email", $param);
if ( $check ) {
throw new Exception('This email is already registered');
}
但这并没有解决问题。如果我检查控制台上的网络选项卡下的函数,它会抛出一个错误,该函数将触发成功返回,但响应为空。我在console.log上看到了这条消息:
成功消息:null
处理这种情况的最佳方法是什么?我想检查该功能是否将完成所有小部件,并且仅在实际完成所有操作时才返回成功。
答案 0 :(得分:1)
RXJS-Catch将在HTTP代码上触发,表示错误。通常,建议发送有用的代码,如400(错误请求)。
要发送此类错误,请将以下行添加到PHP错误案例中:
http_response_code(400);
现在看起来应该是这样的:
if ( $check ) {
http_response_code(400);
return print_r(array(
'success' => 0,
'message' => 'This email is already registered'
));
}