חריגים שלא מטופלים עלולים לגרום לבלבול ותסכול. נקה אותם עם מסננים חריגים.

מסנני חריגים של Nest.js מספקים דרך ליירט ולטפל בחריגים באופן גלובלי או על בסיס של בקר.

הם מאפשרים לך לרכז את היגיון הטיפול בשגיאות, לעצב תגובות שגיאות ולספק טיפול עקבי בשגיאות בכל היישום שלך. למד על מסנני חריגים וכיצד להשתמש בהם כדי לטפל כראוי בשגיאות יישומים.

ברירת מחדל לטיפול בשגיאות ב-Nest.js

כברירת מחדל, ל-Nest.js יש שכבת חריג שמתמודדת עם חריגים שקוד האפליקציה שלך לא מטפל בהם.

כאשר מתרחשת שגיאה לא מטופלת באפליקציה שלך, Nest.js תופס אותה ומחזיר שגיאת שרת פנימית של 500 ללקוח. ה-JSON שמחזיר Nest.js במקרה זה נראה כך:

{
"statusCode": 500,
"message": "Internal server error"
}

אם אובייקט השגיאה שהקוד שלך זורק מכיל א statusCode וכן א הוֹדָעָה, Nest.js יחזיר את הערכים האלה במקום תגובת ברירת המחדל.

כדי להימנע מהתנהגות גנרית זו, ולשלוח תגובת שגיאה משמעותית יותר ללקוח, עליך לטפל בחריצות בכל השגיאות שעלולות להתרחש ביישום שלך. אתה יכול להשיג זאת באמצעות מסנני חריגים מובנים או מותאמים אישית של Nest.js.

יצירת מסנן חריגים מותאם אישית

כדי להדגים את התהליך של יצירת מסנן חריג מותאם אישית, נסה ליצור מסנן שיטפל בכל חריגות ה-HTTP.

instagram viewer

התחל עם קובץ שנקרא http.exception.ts והוסף אליו את הייבוא ​​הבא:

import {
ExceptionFilter,
Catch,
ArgumentsHost,
HttpException,
} from'@nestjs/common';

import { Request, Response } from'express';

יבוא זה משרת את המטרות הבאות.

  • מסנן חריגים: זהו ממשק המתאר יישום של מסנן חריג.
  • לתפוס: זהו מעצב שמסמן מחלקה כמסנן חריג של Nest.
  • ArgumentsHost: ממשק זה מספק שיטות לאחזור הארגומנטים שהועברו למטפל. זה מאפשר לך לבחור את הקשר הביצוע המתאים (למשל, HTTP, RPC או WebSockets) כדי לאחזר מהם ארגומנטים.
  • HttpException: זוהי מחלקה המגדירה את חריג Nest HTTP הבסיסי.
  • בַּקָשָׁה & תְגוּבָה: אלו הם הממשקים של אובייקט בקשה ותשובה של Express.js, בהתאמה.

לאחר מכן, צור כיתה, HttpExceptionFilter, שמיישם מסנן חריגים. ציין את זה ב- לתפוס מעצב כדי לציין שהוא מטפל ב-HttpExceptions:

@Catch(HttpException)
exportclassHttpExceptionFilterimplementsExceptionFilter{}

לאחר מכן, מלא את המחלקה בקוד זה:

catch(exception: HttpException, host: ArgumentsHost) {
// Get the response object from the arguments host
const ctx = host.switchToHttp();
const response = ctx.getResponse();

// Get the request object from the arguments host
const request = ctx.getRequest();

// Get the status code from the exception
const status = exception.getStatus();

// Send a JSON response using the response object
response.status(status).json({
statusCode: status,
timestamp: newDate().toISOString(),
path: request.url,
message:
exception.message
|| exception.getResponse()['message']
|| 'Internal Server Error',
});
}

בלוק קוד זה מאחזר את אובייקטי הבקשה והתגובה מהאובייקט ArgumentsHost ומחלץ מידע רלוונטי מהחריג. הוא מחזיר ללקוח תגובת אובייקט JSON מובנית, עם פרטים על השגיאה.

מסנני חריגים מחייבים

אתה יכול לאגד מסנן חריג לבקר או ליישום כולו שלך, בהתאם לצרכים שלך.

כדי לאגד מסנן חריגים באופן גלובלי, תחילה ייבא את מסנן החריגים לתוך שלך main.ts קוֹבֶץ. לאחר מכן, העבר מופע של מסנן החריגים שלך ל- app.useGlobalFilters שיטה:

// main.ts
import { NestFactory } from'@nestjs/core';
import { AppModule } from'./app.module';
import { HttpExceptionFilter } from'./exception/http.exception';

asyncfunctionbootstrap() {
const app = await NestFactory.create(AppModule);

// Bind filter to the application
app.useGlobalFilters(new HttpExceptionFilter());

await app.listen(4050);
}

bootstrap();

כדי לאגד חריג לבקר, ייבא את ה השתמש במסננים דקורטור ומסנן החריגים שלך. ציין את מחלקת הבקר שלך עם ה @UseFilters מעצב והעביר מופע של מסנן החריגים שלך כטיעון למעצב:

@Controller()
@UseFilters(new HttpExceptionFilter())
exportclassAppController{}

המקום שבו אתה מקשר את המסנן שלך יקבע את היקף הטיפול בשגיאות שלך. מסננים הקשורים לבקר יספקו רק את הבקר אליו חיברתם אותו, ומסננים הקשורים לאפליקציה יספקו את כל האפליקציה.

שימוש בחריגים מובנים כדי לזרוק שגיאות

Nest.js מספק מחלקות חריגות מובנות בהן תוכל להשתמש כדי להעלות שגיאות.

לדוגמה, אתה יכול לזרוק 404 שגיאות קוד מצב עם ה NotFoundException מעמד:

 getUserById(id: number) {
const user = users.find((user) => user.id id);

if (!user) {
thrownew NotFoundException({
message: `User with id ${id} not found`,
});
}
}

בלוק קוד זה משתמש הצהרה על תנאי כדי לבדוק אם המשתמש הנתון קיים. אם לא, הוא זורק שגיאת 404 באמצעות ה NotFoundException, העברת הודעה כטיעון.

כיתות חריגות מובנות נפוצות

מחלקות חריגות מובנות אחרות כוללות, בין היתר, את הדברים הבאים.

  • BadRequestException: זורק חריג המציין בקשה שגויה עם קוד סטטוס של 400. אתה יכול להשתמש בחריג זה כאשר בקשת הלקוח אינה חוקית או פגומה, והשרת אינו יכול לעבד אותה עקב שגיאת הלקוח. זה בדרך כלל מרמז שהלקוח צריך לשנות את הבקשה כדי שהיא תקפה.
  • UnauthorizedException: זורק חריג המציין גישה לא מורשית עם קוד סטטוס של 401. אתה יכול להשתמש בחריג זה כאשר משתמש אינו מאומת או חסר ההרשאות הדרושות לגישה למשאב.
  • חריגה אסורה: זורק חריג המציין גישה אסורה עם קוד סטטוס של 403. אתה יכול להשתמש בחריג זה כאשר משתמש הוא מאומת אך לא מורשה לבצע פעולה ספציפית.
  • RequestTimeoutException: זורק חריג המציין שפסק הזמן הקצוב לבקשה עם קוד סטטוס של 408. אתה יכול להשתמש בחריג זה כאשר שרת מסיים בקשה מכיוון שלקח זמן רב מדי לעיבוד.
  • ConflictException: זורק חריג המציין התנגשות עם קוד סטטוס של 409. אתה יכול להשתמש בחריג זה כאשר קיימת התנגשות בין בקשת הלקוח לבין המצב הנוכחי של המשאב, כגון בעת ​​ניסיון ליצור משאב שכבר קיים.
  • InternalServerErrorException: זורק חריג המציין שגיאת שרת פנימית עם קוד מצב של 500. אתה יכול להשתמש בחריג זה כאשר מתרחשת שגיאה בלתי צפויה בצד השרת, המעידה על כך שהשרת אינו יכול למלא את הבקשה עקב בעיה פנימית.

שיטות עבודה מומלצות לטיפול בשגיאות ב-Nest.js

בעת טיפול בשגיאות ב-Nest.js, הקפד להשתמש במסנני חריגים כדי לתפוס ולטפל בחריגים באופן גלובלי או לכל בקר. אתה יכול גם ליצור מסננים מותאמים אישית עבור סוגי חריגים ספציפיים.

בנוסף, ודא שאתה משתמש במחלקות החריגות המובנות המתאימות כדי לזרוק שגיאות נכונות ומשמעותיות. שיטות אלה יכולות לשפר משמעותית את האמינות של אפליקציות Nest.js שלך.