我有一個呼叫服務的控制元件。如果服務從資料庫回傳一個空的有效負載,我想拋出一個例外。
目前我正在服務中這樣做:這是我目前擁有的服務,但例外。
async getPreferences(eUserId: string): Promise<UserPreferences> {
const userPreferences = await this.userPreferencesModel.findOne({
eUserId,
});
if (!userPreferences) {
throw new NotFoundException("We couldn't find your user preferences");
}
return userPreferences;
}
我希望控制器處理例外,問題是控制器回應是 Promise。我該如何處理?
這是我刮胡子的:
@Get()
async getPreferences(
@Headers('x-e-user-id') eUserId: string,
): Promise<UserPreferences> {
const userPreferences = this.userPreferencesService.getPreferences(eUserId);
console.log('userPreferences: ', userPreferences);
// Here is what I am trying to monitor...
if (userPreferences) {
throw new NotFoundException("We couldn't find your user preferences");
}
return userPreferences;
}
控制器中的 console.log 回傳:
userPreferences: Promise { <pending> }
現在,如果服務回應為空,則不會引發例外。
如何監視服務結果以引發例外
uj5u.com熱心網友回復:
有多種方法可以解決這個問題。這是一個。
不要在您的服務中拋出錯誤,只需回傳結果或null.
async getPreferences(eUserId: string): Promise<UserPreferences | null> {
return this.userPreferencesModel.findOne({
eUserId,
});
}
然后在您的控制器await中獲取結果,您忘記了這一點。這就是為什么你會看到一個未決的承諾。解決結果后,檢查是否回傳了任何用戶首選項,NotFoundException如果沒有則拋出。
@Get()
async getPreferences(@Headers('x-e-user-id') eUserId: string): Promise<UserPreferences> {
const userPreferences = await this.userPreferencesService.getPreferences(eUserId);
if (!userPreferences) {
throw new NotFoundException("We couldn't find your user preferences");
}
return userPreferences;
}
我不會NotFoundException從您的服務中拋出或任何其他與 HTTP 相關的錯誤。將此責任留給您的控制器,不要將您的服務(邏輯)與 HTTP 錯誤代碼聯系起來。在此處拋出不知道它們正在使用的背景關系 (HTTP) 的錯誤。
PS:您也可以考慮通過查詢字串或作為路由引數而不是通過標頭傳遞用戶 ID。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/494836.html
