ایکسپریس پلیٹو بلاکچین ڈیٹا انٹیلی جنس میں استثنیٰ ہینڈلنگ کے لیے رہنما۔ عمودی تلاش۔ عی

ایکسپریس میں استثنیٰ ہینڈلنگ کے لیے گائیڈ

تعارف

صارفین کسی بھی ایپلیکیشن کے ساتھ تعامل کرتے وقت مستثنیات اور غلطی ضرور ہوتی ہیں، یہ سافٹ ویئر انجینئرز پر منحصر ہے کہ وہ جان بوجھ کر یا انجانے میں پیدا ہونے والی کسی بھی خرابی کو سنبھالنے کے لیے کوئی ذریعہ منتخب کریں۔ نتیجے کے طور پر، ایکسپریس کے ساتھ APIs بنانے والے بیک اینڈ ڈویلپرز خود کو یہ یقینی بنانے کے لیے کام کرتے ہوئے پاتے ہیں کہ وہ ایک کارآمد، موثر، اور قابل استعمال API بنا رہے ہیں۔ سب سے زیادہ اہمیت یہ ہے کہ غلطیوں کو اس طرح سنبھالا جائے کہ ایک مضبوط نظام بنایا جائے کیونکہ اس سے ترقی کے وقت، صریح غلطیاں، پیداواری مسائل کو کم کرنے میں مدد ملتی ہے، اور سافٹ ویئر کی ترقی کی کامیابی یا اسکیل ایبلٹی کا تعین ہوتا ہے۔

کیا آپ کو غلطی کے پیغام کو لاگ کرنے، غلطی کو دبانے، صارفین کو غلطی کے بارے میں مطلع کرنے، یا غلطیوں کو سنبھالنے کے لیے کوڈ لکھنے کی ضرورت ہے؟ مزید تعجب نہیں.

اس گائیڈ میں، ہم ایکسپریس ایپلی کیشنز کے لیے ایک مضبوط ایرر ہینڈلنگ کوڈ بیس بنانے کا طریقہ سیکھیں گے، جو ایپلی کیشن کی غلطیوں کا پتہ لگانے میں مدد فراہم کرے گا اور رن ٹائم کے دوران کسی بھی ایپلیکیشن کو خوبصورتی سے ناکام ہونے سے باز رکھنے کے لیے بہترین اقدامات کرے گا۔

نوٹ: ہم اپنے ڈیمو میں API کو جانچنے کے لیے پوسٹ مین کا استعمال کریں گے۔ آپ اسے پر ڈاؤن لوڈ کر سکتے ہیں۔ پوسٹ مین ڈاؤن لوڈ صفحہ. متبادل طور پر، آپ آسانی سے براؤزر، کمانڈ لائن استعمال کر سکتے ہیں۔ curl ٹول، یا کوئی دوسرا ٹول جس سے آپ واقف ہوں گے۔

ایرر ہینڈلنگ کیا ہے؟

سافٹ ویئر ڈویلپمنٹ میں، دو مختلف قسم کی مستثنیات ہیں: آپریشنل اور پروگراماتی۔.

  • رن ٹائم کے دوران آپریشنل ناکامیاں پیدا ہو سکتی ہیں، اور ایپلیکیشن کو اچانک ختم ہونے سے روکنے کے لیے، ہمیں غلطی سے نمٹنے کے موثر طریقوں کے ذریعے ان مستثنیات کو احسن طریقے سے ہینڈل کرنا چاہیے۔
  • پروگرامی استثناء کو پروگرامر کے ذریعہ دستی طور پر پھینک دیا جاتا ہے، جب ایک غیر معمولی حالت پیدا ہوتی ہے۔

آپ آپریشنل مستثنیات کے بارے میں سوچ سکتے ہیں جیسے "غیر متوقع، لیکن متوقع" مستثنیات (جیسے کہ حد سے باہر کسی اشاریہ تک رسائی حاصل کرنا)، اور پروگرامی مستثنیات کو "متوقع اور متوقع" استثناء (جیسے نمبر فارمیٹنگ استثنا)۔

استثنیٰ ہینڈلنگ وہ طریقہ کار ہے جو کسی پروگرام میں خامیوں کو تلاش کرنے اور ان کو دور کرنے کے لیے استعمال ہوتا ہے۔ ایرر ہینڈلنگ پیغامات بھیجتا ہے جس میں غلطی کی قسم اور وہ اسٹیک شامل ہوتا ہے جہاں غلطی ہوئی تھی۔

نوٹ: کمپیوٹر سائنس میں، مستثنیات سے بازیافت ہوتی ہے، اور عام طور پر رن ​​ٹائم کے دوران آپریشنل یا پروگرامی مسائل سے ہوتی ہے۔ خرابیاں عام طور پر بیرونی عوامل کی شکل میں پیدا ہوتی ہیں، جیسے ہارڈ ویئر کی حدود، کنیکٹیویٹی کے مسائل، میموری کی کمی، وغیرہ۔ جاوا اسکرپٹ میں، اصطلاحات کو اکثر ایک دوسرے کے ساتھ استعمال کیا جاتا ہے، اور حسب ضرورت مستثنیات سے اخذ کیا جاتا ہے۔ Error کلاس Error کلاس خود غلطیوں اور استثناء دونوں کی نمائندگی کرتا ہے۔

ایکسپریس میں، استثنیٰ ہینڈلنگ سے مراد یہ ہے کہ کس طرح ایکسپریس ہم آہنگی اور غیر مطابقت پذیر استثناء کو پکڑنے اور اس پر کارروائی کرنے کے لیے خود کو ترتیب دیتی ہے۔ ایکسپریس میں استثنیٰ ہینڈلنگ کے بارے میں اچھی بات یہ ہے کہ ایک ڈویلپر کے طور پر، آپ کو اپنے استثنائی ہینڈلرز لکھنے کی ضرورت نہیں ہے۔ ایکسپریس پہلے سے طے شدہ استثنا ہینڈلر کے ساتھ آتا ہے۔ استثنیٰ ہینڈلر غلطیوں کی نشاندہی کرنے اور صارف کو ان کی اطلاع دینے میں مدد کرتا ہے۔ یہ مختلف علاج کی حکمت عملی بھی فراہم کرتا ہے اور مستثنیات کو کم کرنے کے لیے ان کا نفاذ کرتا ہے۔

اگرچہ یہ لگتا ہے کہ بہت ساری چیزیں ہڈ کے نیچے جا رہی ہیں، ایکسپریس میں استثنیٰ ہینڈلنگ پروگرام کے مجموعی عمل کو سست نہیں کرتی ہے اور نہ ہی اس کے عمل کو روکتی ہے۔

ایکسپریس میں استثنا ہینڈلنگ کو سمجھنا

ایکسپریس کے ساتھ آنے والے ڈیفالٹ ایرر ہینڈلر کے ساتھ، ہمارے ہاتھ میں مڈل ویئر فنکشنز کا ایک سیٹ ہے جو روٹ ہینڈلرز میں خود بخود غلطیوں کو پکڑنے میں مدد کرتا ہے۔ جلد ہی، ہم تھیوری کو عملی جامہ پہنانے کے لیے ایک پروجیکٹ بنائیں گے کہ ایکسپریس ایپ میں صحیح غلطیوں کو کیسے واپس کیا جائے اور کس طرح حساس معلومات کو لیک نہ کیا جائے۔

ایکسپریس میں مڈل ویئر فنکشن کی وضاحت کرنا

غلطی سے نمٹنے کے مڈل ویئر کے افعال کی وضاحت اس طرح کی گئی ہے کہ وہ ایک کو قبول کرتے ہیں۔ Error آبجیکٹ کو پہلے ان پٹ پیرامیٹر کے طور پر، اس کے بعد کسی دوسرے مڈل ویئر فنکشن کے ڈیفالٹ پیرامیٹرز: request, response، اور next. next() فنکشن تمام موجودہ مڈل ویئر کو روٹر کے لیے اگلے ایرر ہینڈلر پر چھوڑ دیتا ہے۔

ایکسپریس میں ایرر ہینڈلنگ ترتیب دینا

نوڈ اور ایکسپریس ایپ بنانے کے لیے اپنے ٹرمینل میں درج ذیل کمانڈ کو چلائیں۔

$ mkdir error-handling-express

نئے بنائے گئے فولڈر میں، آئیے ایک نیا نوڈ پروجیکٹ شروع کریں:

$ cd error-handling-express && npm init -y

یہ تخلیق کرتا ہے a package.json ہمارے فولڈر میں فائل۔

ہماری نوڈ ایپ میں ایکسپریس سرور بنانے کے لیے، ہمیں انسٹال کرنا ہوگا۔ express پیکیج، dotenv ماحول کے متغیرات کو خود بخود لوڈ کرنے کے لیے .env میں فائل کریں process.env اعتراض، اور nodemon نوڈ ایپ کو دوبارہ شروع کرنے کے لیے اگر ڈائریکٹری میں فائل کی تبدیلی نوٹ کی جاتی ہے۔

$ npm install express dotenv nodemon

اگلا، ایک بنائیں app.js پروجیکٹ فولڈر میں فائل جو ایپ کے لیے انڈیکس فائل کے طور پر کام کرے گی۔

اب جب کہ ہم نے اپنی ایکسپریس ایپ کے لیے تمام ضروری انحصار انسٹال کر لیے ہیں، ہمیں ایپ کو پڑھنے کے لیے اسکرپٹ سیٹ اپ کرنے کی ضرورت ہے۔ package.json فائل اس کو حاصل کرنے کے لیے، package.json فائل، تاکہ scripts آبجیکٹ ذیل میں دکھایا گیا ہے:

"scripts": {
    "start": "nodemon app.js"
},

متبادل طور پر، آپ استعمال کرنا چھوڑ سکتے ہیں۔ nodemon، اور استعمال کریں node app.js بجائے.

ایکسپریس سرور قائم کرنا

سرور قائم کرنے کے لیے، ہمیں پہلے مختلف پیکجوں کو درآمد کرنا ہوگا۔ app.js. ہم بھی ایک بنائیں گے۔ .env پروجیکٹ ڈائرکٹری میں فائل - ایپلی کیشن کے لئے تمام ماحولیاتی متغیرات کو ذخیرہ کرنے کے لئے:



const express = require('express')
require('dotenv').config

PORT=4000 

ہم نے ایپ کے لیے پورٹ نمبر کی وضاحت کی ہے۔ .envجس میں لوڈ کیا جاتا ہے اور پڑھا جاتا ہے۔ dotenv، اور بعد میں رسائی حاصل کی جاسکتی ہے۔

ایکسپریس سرور کو شروع کرنا

اب، ہمیں ایکسپریس سرور کو شروع کرنے اور ٹیسٹ روٹ کی درخواست کے ساتھ ساتھ اپنی ایپ کو ایپ پورٹ نمبر سننے کی ضرورت ہے۔ /test. آئیے اپ ڈیٹ کریں۔ app.jsدرآمدی بیانات کے نیچے:


const app = express();
const port = process.env.PORT || 4000;

app.get("/test", async (req, res) => {
    return res.status(200).json({ success: true });
});

app.listen(port, () => {
    console.log(`Server is running at port ${port}`);
});

یہاں سے، ہم ایکسپریس میں، آپریشنل غلطیوں کے استعمال کے مختلف کیسز کو سنبھالنے کا طریقہ سیکھیں گے۔

ایکسپریس میں خرابیوں کو ہینڈل کرنا

فرض کریں کہ آپ کو صارفین کے ڈیٹا بیس سے تمام صارفین کو لانے کی ضرورت ہے، آپ منطق کو لپیٹ کر ایک ممکنہ غلطی کے منظر نامے کو مؤثر طریقے سے سنبھال سکتے ہیں جہاں ڈیٹا بیس میں کوئی ڈیٹا موجود نہیں ہے۔ try/catch بلاک - کسی بھی غلطی کو پکڑنے کی امید ہے جو اس میں پیش کر سکتی ہے۔ catch بلاک:


const getUser = () => undefined;

app.get("/get-user", async (req, res) => {
	try {
		const user = getUser();
		if (!user) {
			throw new Error('User not found');
		}
	} catch (error) {
	    
		console.log(error); 
		
		res.status(400).send(error.message) 
	}
	return res.status(200).json({
		success: true
	});
});

اس کے نتائج:

User not found

اب، جب یہ درخواست کی جاتی ہے (آپ پوسٹ مین کا استعمال کرتے ہوئے جانچ کر سکتے ہیں) اور ڈیٹا بیس پر کوئی صارف موجود نہیں ہے، کلائنٹ کو ایک ایرر میسج موصول ہوتا ہے جس میں کہا جاتا ہے کہ "صارف نہیں ملا"۔ نیز، آپ دیکھیں گے کہ کنسول میں بھی غلطی لاگ ان ہے۔

ایرر ہینڈلر مڈل ویئر کے ساتھ ایرر ہینڈلنگ کو بہتر بنانا

ہم ایک ایرر ہینڈلر مڈل ویئر بنا کر ترقی کو بہتر بنا سکتے ہیں جو تمام متعین راستوں کے آخر میں آئے گا، تاکہ اگر کسی ایک روٹ میں غلطی ہو جائے تو ایکسپریس خود بخود اگلے مڈل ویئر پر نظر ڈالے گا اور فہرست میں نیچے جاتا رہے گا۔ جب تک یہ ایرر ہینڈلر تک نہ پہنچ جائے۔ ایرر ہینڈلر غلطی پر کارروائی کرے گا اور کلائنٹ کو جواب بھی بھیجے گا۔

بہترین طرز عمل، صنعت کے لیے منظور شدہ معیارات، اور چیٹ شیٹ کے ساتھ Git سیکھنے کے لیے ہمارے ہینڈ آن، عملی گائیڈ کو دیکھیں۔ گوگلنگ گٹ کمانڈز کو روکیں اور اصل میں سیکھ یہ!

شروع کرنے کے لیے، نام کا ایک فولڈر بنائیں middleware پروجیکٹ ڈائرکٹری میں، اور اس فولڈر میں، نامی ایک فائل بنائیں errorHandler.js جو ایرر ہینڈلر کی وضاحت کرتا ہے:

const errorHandler = (error, req, res, next) => {
    
    console.log(error); 
    
    res.status(400).send(error.message); 
}
module.exports = errorHandler;

اپنے مڈل ویئر فنکشن میں، ہم نے ایکسپریس کو آگاہ کیا ہے کہ یہ کوئی بنیادی مڈل ویئر فنکشن نہیں ہے، بلکہ ایک ایرر ہینڈلر ہے، error 3 بنیادی پیرامیٹرز سے پہلے پیرامیٹر۔

اب، ہم اپنے ڈیمو میں ایرر ہینڈلر استعمال کریں گے۔ app.js اور ایرر ہینڈلر مڈل ویئر کے ساتھ صارفین کو بازیافت کرنے کی ابتدائی غلطی کو سنبھالیں، جیسا کہ ذیل میں دکھایا گیا ہے:


const getUser = () => undefined;

app.get("/get-user", async (req, res, next) => {
	try {
		const user = getUser();
		if (!user) {
			throw new Error("User not found");
		}
	} catch (error) {
		return next(error);
	}
});

app.use(errorHandler);

ہم اپنے کوڈ کو اور بھی بہتر بنا سکتے ہیں، کے ارد گرد ایک خلاصہ بنا کر try/catch منطق ہم اسے پروجیکٹ ڈائرکٹری میں ایک نیا فولڈر بنا کر حاصل کرسکتے ہیں جسے کہا جاتا ہے۔ utils، اور اس میں، نامی ایک فائل بنائیں tryCatch.js.

خلاصہ کرنے کے لئے try-catch منطق - ہم ایک فنکشن کی وضاحت کر سکتے ہیں جو کسی دوسرے فنکشن کو قبول کرتا ہے (جسے کہا جاتا ہے کنٹرولر) اس کے پیرامیٹر کے طور پر، اور ایک لوٹاتا ہے۔ async فنکشن جو ایک منعقد کرے گا try/catch کسی بھی موصول کنٹرولر کے لیے۔

اگر کنٹرولر میں کوئی خرابی واقع ہوتی ہے، تو اسے میں پکڑا جاتا ہے۔ catch بلاک اور اگلے فنکشن کو کہا جاتا ہے:


const tryCatch = (controller) => async (req, res, next) => {
	try {
		await controller(req, res);
	} catch (error) {
		return next(error);
	}
};
module.exports = tryCatch;

کے ساتہ try/catch خلاصہ، ہم اپنے کوڈ کو چھوڑ کر اسے مزید مختصر بنانے کے لیے ری فیکٹر کر سکتے ہیں۔ try-catch میں صارفین کو بازیافت کرتے وقت واضح طور پر شق app.js:


const getUser = () => undefined;

app.get(
	"/get-user",
	tryCatch(async (req, res) => {
		const user = getUser();
		if (!user) {
			throw new Error("User not found");
		}
		res.status(400).send(error.message);
	})
);

ہم نے ٹرائی کیچ منطق کو کامیابی کے ساتھ ختم کر دیا ہے اور ہمارا کوڈ اب بھی اسی طرح کام کرتا ہے جیسا کہ یہ پہلے کرتا تھا۔

ایکسپریس میں توثیق کی خرابیوں کو ہینڈل کرنا

اس ڈیمو کے لیے، ہم لاگ ان کے لیے اپنی ایکسپریس ایپ میں ایک نیا روٹ بنائیں گے - لاگ ان ہونے پر صارف کی شناخت کی توثیق کرنے کے لیے۔ سب سے پہلے، ہم انسٹال کریں گے۔ joi پیکیج، اسکیما بنانے میں مدد کرنے کے لیے، جس کے ساتھ ہم ضروریات کو نافذ کر سکتے ہیں:

$ npm i joi

اگلا، ایک اسکیما بنائیں جو کہ a Joi.object ایک userId جو کہ ایک نمبر ہونا چاہیے اور اس کی ضرورت ہے - یعنی درخواست کا کسی شے سے مماثل ہونا چاہیے جس پر صارف ID ہو۔

ہم استعمال کرسکتے ہیں validate() اسکیما آبجیکٹ میں طریقہ اسکیما کے خلاف ہر ان پٹ کو درست کرنے کے لیے:


const schema = Joi.object({
	userId: Joi.number().required(),
});

app.post(
	"/login",
	tryCatch(async (req, res) => {
		const {error, value} = schema.validate({});
		if (error) throw error;
	})
);

اگر ایک خالی چیز کو میں منتقل کیا جاتا ہے۔ validate() طریقہ، غلطی کو احسن طریقے سے سنبھالا جائے گا، اور غلطی کا پیغام کلائنٹ کو بھیجا جائے گا:

کنسول پر، ہمیں ایک تک رسائی بھی ملتی ہے۔ details صف جس میں غلطی کے بارے میں مختلف تفصیلات شامل ہیں جو ضرورت پڑنے پر صارف کو بتائی جا سکتی ہیں۔

خاص طور پر توثیق کی غلطیوں کو اس طرح سے ہینڈل کرنے کے لیے کہ فی توثیق کی خرابی کے لیے مناسب غلطی کی تفصیل کو منتقل کرنے کے لیے، ایرر ہینڈلر مڈل ویئر کو ری فیکٹر کیا جا سکتا ہے:


const errorHandler = (error, req, res, next) => {
	console.log(error); 

	if (error.name === "ValidationError") {
		return res.status(400).send({
			type: "ValidationError",
			details: error.details,
		});
	}

	res.status(400).send(error.message); 
};

module.exports = errorHandler;

ساتھ errorHandler.js اب اپنی مرضی کے مطابق کیا گیا ہے، جب ہم ایک خالی شے کے ساتھ ایک ہی درخواست کرتے ہیں۔ validate() طریقہ:

ایکسپریس پلیٹو بلاکچین ڈیٹا انٹیلی جنس میں استثنیٰ ہینڈلنگ کے لیے رہنما۔ عمودی تلاش۔ عی

اب ہمارے پاس ایک حسب ضرورت چیز تک رسائی ہے جو پیغامات کو زیادہ پڑھنے کے قابل/دوستانہ انداز میں واپس کرتی ہے۔ اس طرح، ہم آنے والی غلطی کی بنیاد پر مختلف قسم کی غلطیاں بھیجنے اور ان کو سنبھالنے کے قابل ہیں۔

نتیجہ

اس گائیڈ میں، ہم نے Express.js کے ایرر ہینڈلنگ کے ہر پہلو کا جائزہ لیا، بشمول ہم وقت ساز اور غیر مطابقت پذیر کوڈ کو ڈیفالٹ کے ذریعے کیسے ہینڈل کیا جاتا ہے، آپ کی اپنی ایرر کلاسز کیسے بنائیں، کس طرح اپنی مرضی کے مطابق ایرر ہینڈلنگ مڈل ویئر فنکشن لکھیں اور فراہم کریں۔ next آخری کیچ ہینڈلر کے طور پر

جیسا کہ وہاں موجود ہر کام کے ساتھ ہوتا ہے، ترقی کے دوران بھی بہترین طریقے ہیں جن میں مؤثر طریقے سے خرابی کو ہینڈل کرنا شامل ہے، اور آج ہم نے سیکھا ہے کہ ہم ایکسپریس ایپ میں خرابیوں کو کس طرح مضبوط طریقے سے ہینڈل کر سکتے ہیں۔

غلطیوں کو صحیح طریقے سے ہینڈل کرنے کا مطلب یہ نہیں ہے کہ کیڑے اور غلطیوں کو آسانی سے ڈھونڈ کر ترقی کے وقت کو کم کرنا ہے بلکہ بڑے پیمانے پر ایپلی کیشنز کے لیے ایک مضبوط کوڈ بیس تیار کرنا بھی ہے۔ اس گائیڈ میں، ہم نے دیکھا ہے کہ آپریشنل غلطیوں سے نمٹنے کے لیے مڈل ویئر کیسے ترتیب دیا جائے۔ ایرر ہینڈلنگ کو بہتر بنانے کے کچھ دوسرے طریقوں میں شامل ہیں: اسٹیک ٹریس کو نہ بھیجنا، نہ پکڑے گئے استثنیات کو سنبھالنے کے لیے عمل کو احسن طریقے سے روکنا، مناسب ایرر میسیجز فراہم کرنا، ایرر لاگز بھیجنا، اور ایک ایسی کلاس ترتیب دینا جو اسٹیک کو بڑھاتا ہے۔ Error کلاس.

مجھے امید ہے کہ میں نے اس ٹیوٹوریل میں جو مثالیں استعمال کیں وہ آپ کے لیے خوشگوار تھیں۔ میں نے مختلف منظرناموں کا احاطہ کیا ہے جن کا آپ کو ممکنہ طور پر سامنا ہو سکتا ہے جب ایک ایکسپریس ایپلیکیشن لکھتے وقت حقیقی دنیا میں غلطی کے انتظام کے بارے میں استعمال کیا جا سکتا ہے۔ براہ کرم، مجھے بتائیں کہ اگر میں نے کچھ یاد کیا ہے. اس سے ہمیں فائدہ ہوگا اور مجھے مزید جاننے میں بھی مدد ملے گی۔ آپ کا دن اچھا گزرے اور پڑھنے کا شکریہ۔

آپ مضمون میں استعمال ہونے والے تمام سورس کوڈ کا حوالہ دے سکتے ہیں۔ Github کے.

اضافی وسائل

ٹائم اسٹیمپ:

سے زیادہ Stackabuse