अनचाहे अपवाद भ्रम और हताशा पैदा कर सकते हैं। उन्हें अपवाद फ़िल्टर से साफ़ करें.

Nest.js अपवाद फ़िल्टर विश्व स्तर पर या प्रति-नियंत्रक आधार पर अपवादों को रोकने और संभालने का एक तरीका प्रदान करते हैं।

वे आपको त्रुटि-प्रबंधन तर्क को केंद्रीकृत करने, त्रुटि प्रतिक्रियाओं को प्रारूपित करने और आपके एप्लिकेशन में लगातार त्रुटि प्रबंधन प्रदान करने देते हैं। अपवाद फ़िल्टर के बारे में जानें और एप्लिकेशन त्रुटियों को उचित रूप से संभालने के लिए उनका उपयोग कैसे करें।

Nest.js में डिफ़ॉल्ट त्रुटि प्रबंधन

डिफ़ॉल्ट रूप से, Nest.js में एक अपवाद परत होती है जो किसी भी अपवाद से निपटती है जिसे आपका एप्लिकेशन कोड संभाल नहीं पाता है।

जब आपके एप्लिकेशन में कोई हैंडल न की गई त्रुटि होती है, तो Nest.js उसे पकड़ लेता है और क्लाइंट को 500 आंतरिक सर्वर त्रुटि लौटा देता है। इस मामले में Nest.js जो JSON लौटाता है वह इस तरह दिखता है:

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

यदि आपके कोड द्वारा फेंकी गई त्रुटि ऑब्जेक्ट में a स्थिति का कोड और ए संदेश, Nest.js डिफ़ॉल्ट प्रतिक्रिया के बजाय उन मानों को लौटाएगा।

इस सामान्य व्यवहार से बचने के लिए, और क्लाइंट को अधिक सार्थक त्रुटि प्रतिक्रिया भेजने के लिए, आपको अपने एप्लिकेशन में होने वाली सभी त्रुटियों को परिश्रमपूर्वक संभालने की आवश्यकता है। आप इसे Nest.js के अंतर्निहित या कस्टम अपवाद फ़िल्टर का उपयोग करके प्राप्त कर सकते हैं।

instagram viewer

एक कस्टम अपवाद फ़िल्टर बनाना

एक कस्टम अपवाद फ़िल्टर बनाने की प्रक्रिया को प्रदर्शित करने के लिए, एक ऐसा फ़िल्टर बनाने का प्रयास करें जो सभी HTTP अपवादों को संभाल सके।

नामक फ़ाइल से प्रारंभ करें http.exception.ts और इसमें निम्नलिखित आयात जोड़ें:

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

import { Request, Response } from'express';

ये आयात निम्नलिखित उद्देश्यों की पूर्ति करते हैं।

  • अपवादफ़िल्टर: यह एक अपवाद फ़िल्टर के कार्यान्वयन का वर्णन करने वाला एक इंटरफ़ेस है।
  • पकड़ना: यह एक डेकोरेटर है जो एक क्लास को नेस्ट अपवाद फ़िल्टर के रूप में चिह्नित करता है।
  • तर्क होस्ट: यह इंटरफ़ेस हैंडलर को दिए गए तर्कों को पुनः प्राप्त करने के लिए तरीके प्रदान करता है। यह आपको तर्क पुनर्प्राप्त करने के लिए उचित निष्पादन संदर्भ (उदाहरण के लिए, HTTP, RPC, या WebSockets) चुनने की अनुमति देता है।
  • Httpअपवाद: यह एक वर्ग है जो बेस नेस्ट HTTP अपवाद को परिभाषित करता है।
  • अनुरोध & प्रतिक्रिया: ये क्रमशः Express.js अनुरोध और प्रतिक्रिया ऑब्जेक्ट के लिए इंटरफ़ेस हैं।

इसके बाद, एक क्लास बनाएं, HttpExceptionफ़िल्टर, जो लागू करता है अपवादफ़िल्टर. के साथ इसे एनोटेट करें पकड़ना डेकोरेटर यह इंगित करने के लिए कि यह 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 ऑब्जेक्ट प्रतिक्रिया लौटाता है।

बाइंडिंग अपवाद फ़िल्टर

आप अपनी आवश्यकताओं के आधार पर एक अपवाद फ़िल्टर को नियंत्रक या अपने संपूर्ण एप्लिकेशन से बांध सकते हैं।

किसी अपवाद फ़िल्टर को विश्व स्तर पर बाइंड करने के लिए, पहले अपवाद फ़िल्टर को अपने में आयात करें मुख्य.ts फ़ाइल। फिर, अपने अपवाद फ़िल्टर का एक उदाहरण पास करें ऐप.यूज़ग्लोबलफ़िल्टर तरीका:

// 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 फेंक सकते हैं स्थिति कोड त्रुटियाँ साथ अपवाद नहीं मिला कक्षा:

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

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

यह कोड ब्लॉक उपयोग करता है एक सशर्त बयान यह जांचने के लिए कि क्या दिया गया उपयोगकर्ता मौजूद है। यदि नहीं, तो यह का उपयोग करके 404 त्रुटि उत्पन्न करता है अपवाद नहीं मिला, एक संदेश को तर्क के रूप में पारित करना।

सामान्य अंतर्निर्मित अपवाद वर्ग

अन्य अंतर्निहित अपवाद वर्गों में निम्नलिखित शामिल हैं, लेकिन इन्हीं तक सीमित नहीं हैं।

  • BadRequestException: स्थिति कोड के साथ खराब अनुरोध का संकेत देने वाला एक अपवाद फेंकता है 400. आप इस अपवाद का उपयोग तब कर सकते हैं जब क्लाइंट का अनुरोध अमान्य या विकृत हो, और क्लाइंट की त्रुटि के कारण सर्वर इसे संसाधित नहीं कर सकता है। आम तौर पर इसका तात्पर्य यह है कि ग्राहक को अनुरोध को वैध बनाने के लिए उसे संशोधित करने की आवश्यकता है।
  • अनधिकृत अपवाद: स्टेटस कोड के साथ अनधिकृत पहुंच का संकेत देने वाला एक अपवाद फेंकता है 401. आप इस अपवाद का उपयोग तब कर सकते हैं जब कोई उपयोगकर्ता प्रमाणित नहीं है या उसके पास संसाधन तक पहुंचने के लिए आवश्यक अनुमतियों का अभाव है।
  • निषिद्ध अपवाद: स्टेटस कोड के साथ निषिद्ध पहुंच का संकेत देने वाला एक अपवाद फेंकता है 403. जब कोई उपयोगकर्ता हो तो आप इस अपवाद का उपयोग कर सकते हैं प्रमाणित लेकिन अधिकृत नहीं किसी विशिष्ट क्रिया को करने के लिए।
  • RequestTimeoutException: एक अपवाद फेंकता है जो दर्शाता है कि अनुरोध का स्टेटस कोड के साथ समय समाप्त हो गया है 408. आप इस अपवाद का उपयोग तब कर सकते हैं जब कोई सर्वर किसी अनुरोध को समाप्त कर देता है क्योंकि इसे संसाधित करने में बहुत लंबा समय लगता है।
  • संघर्ष अपवाद: स्थिति कोड के साथ टकराव का संकेत देने वाला एक अपवाद फेंकता है 409. आप इस अपवाद का उपयोग वहां कर सकते हैं जहां ग्राहक के अनुरोध और संसाधन की वर्तमान स्थिति के बीच विरोधाभास है, जैसे कि पहले से मौजूद संसाधन बनाने का प्रयास करते समय।
  • आंतरिक सर्वर त्रुटि अपवाद: स्थिति कोड के साथ आंतरिक सर्वर त्रुटि का संकेत देने वाला एक अपवाद फेंकता है 500. आप इस अपवाद का उपयोग तब कर सकते हैं जब सर्वर साइड पर कोई अप्रत्याशित त्रुटि होती है, जो इंगित करती है कि सर्वर किसी आंतरिक समस्या के कारण अनुरोध को पूरा नहीं कर सकता है।

Nest.js में त्रुटि प्रबंधन के लिए सर्वोत्तम अभ्यास

Nest.js में त्रुटियों को संभालते समय, विश्व स्तर पर या प्रति-नियंत्रक अपवादों को पकड़ने और संभालने के लिए अपवाद फ़िल्टर का उपयोग करना सुनिश्चित करें। आप विशिष्ट अपवाद प्रकारों के लिए कस्टम फ़िल्टर भी बना सकते हैं।

इसके अतिरिक्त, सुनिश्चित करें कि आप उचित और सार्थक त्रुटियाँ उत्पन्न करने के लिए उपयुक्त अंतर्निहित अपवाद वर्गों का उपयोग करें। ये प्रथाएं आपके Nest.js ऐप्स की विश्वसनीयता में उल्लेखनीय रूप से सुधार कर सकती हैं।