Angular httpClient - 没有捕获 PHP 错误对象

Angular httpClient - not catching PHP error object

我的任务是连接到旧的 php 登录名 api,它只是 returns 一个成功或错误消息响应对象。

当我使用正确的凭据连接时,我会收到成功对象,而当我没有收到错误消息时。太棒了!

但是,httpClient 似乎无法识别错误对象。因此,无论是否成功,该对象都被接受为成功的响应对象。

php代码相关的两行:

$response = array("error" => "Combinación user-pass errónea", "success" => false, "status" => 500, "message" => "Error");
echo $json_response = safe_json_encode($response);

然后我向错误响应添加了更多属性,希望它能被识别:

$response = array("error" => "Combinación user-pass errónea", "success" => false, "status" => 403, "message" => "Error");

运气不好...

然后我将 observable 转换为 promise,以便使过程尽可能接近使用相同登录 api:[=15 的 AngularJS 应用程序上使用的代码=]

let httpOptions = {
  headers: new HttpHeaders(
    { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8' }),
};

let params = new HttpParams({
  fromObject: { action: "login", username: credentials.username, password: credentials.password },
});

this.httpClient.post(`http://xxxxxxxxxxx/user_controller.php`, params.toString(), httpOptions).toPromise()
.then( data => console.log(data),
        err => console.log(err) );

仍然没有运气...

$http.error 处理程序由服务器错误(如 500 或 401)触发; 如果您希望为错误登录触发 401 错误(未经授权),请执行以下操作:

if ($loginFailed) {
  header("HTTP/1.1 401 Unauthorized");
  exit;
}

您的 angular 代码会将其识别为错误。

如果您想继续按照当前的方式发回错误,请在成功回调中拾取它们,因为根据服务器,调用实际上是成功的。

this.httpClient.post(`http://xxxxxxxxxxx/user_controller.php`, params.toString(), httpOptions).toPromise()
.then( data => { 
    console.log(data); 
    if (JSON.parse(data).error) this.triggerErrorResponse(data.error); 
  }, err => console.log(err) );