如何正确返回和处理函数错误

时间:2017-08-28 15:27:36

标签: javascript php angular

我正在使用PHPAngular 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

处理这种情况的最佳方法是什么?我想检查该功能是否将完成所有小部件,并且仅在实际完成所有操作时才返回成功。

1 个答案:

答案 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'
    ));
}