const movie = await this.movieService.getOne(movie_id);
if(!movie){
throw new Error(
JSON.stringify({
message:'some message',
status:'http status'
})
);
}
const rating = await this.ratingRepository.find({where:{movie});
return rating;
然后在控制器中使用 try catch 并拋出 HttpExeption。
async getAllByMovie(@Param('movie_id') movie_id:string):Promise<Rating[]>{
try{
const ratings = await this.ratingService.getAllRatingsByMovie(Number(movie_id));
return ratings;
}catch(err){
const {message,status} = JSON.parse(err.message);
throw new HttpExeption(message,status);
}
}
好還是不好?
uj5u.com熱心網友回復:
一般來說,從您的服務中拋出業務錯誤并在控制器層處理這些錯誤是一個好主意。但是查看您的代碼還有改進的余地:
對我來說,將messageand字串化status以便將其傳遞給Error.看起來有點奇怪。您可以創建一個包含以下屬性的自定義錯誤:
class MyBusinessError extends Error {
status: number;
constructor(message: string, status: number) {
super(message);
this.status = status;
}
}
但我建議在控制器級別決定應該從 API 回傳哪個狀態,因為這是特定于 http 的,不應該是您的業務邏輯的一部分。
也有例外的過濾器與NestJS來,你可以用它來捕捉例外并把它們轉化為HTTP例外。這樣,您就不需要在每個控制器方法中嘗試捕獲。您可以使用instanceof以下命令檢查特定的錯誤型別:
try {
// ...
}
catch(err) {
if(err instanceof MyBusinessError) {
// handle business error
}
throw err;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/409183.html
標籤:
