我正在使用PHP
和Angular 4
處理Web應用程序以處理應用程序上的CRUD
操作。然而,當談到處理錯誤時,我認爲這不是做事情的最佳方式。如何正確返回並處理功能錯誤
這是我怎樣,我呼籲角的功能:
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');
}
但這並不解決問題。會發生的是,如果我在控制檯的網絡選項卡下檢查該功能,該功能將引發錯誤,並且該功能將觸發成功返回但具有空響應。我看到在此的console.log消息:
成功消息:空
什麼是處理這種情況的最好方法是什麼?我想在哪裏檢查函數是否要完成所有小塊,並且只有在它確實正確地執行了所有操作時才返回成功。
我假設你'sql'函數返回的結果而不是一個布爾。另一件事是'print_r'返回一個布爾值,你需要像'print_r('foo',true)'最後一個字符串輸出的第二個參數,爲什麼不返回json呢?最後:你甚至會顯示一些文字嗎?你應該在新標籤中打開它。我現在不知道如何在PHP中獲取數據,但如果使用'$ _REQUEST'獲取數據,則可以使用get參數來測試輸出 – Soundz
我不知道PHP如何處理異常,但是返回的值爲null '很奇怪。你需要等多久?它可能是超時? –
@Soundz關於sql函數的返回,它可以是Object,array或false,具體取決於查詢。當我使用print_r方法時,沒有問題,一切都按預期工作,但我總是需要檢查成功返回是否實際上是成功或在函數內出錯。我想知道在這種情況下是否有一種方法可以使用選項來引發錯誤,當函數中的某些內容阻止它繼續時。 – celsomtrindade