مدیریت استثنا در جاوا اسکریپت – انجمن DEV

این مقاله در اصل توسط Salem Olorundare در وبلاگ توسعه دهندگان Honeybadger نوشته شده است.
در جاوا اسکریپت، خطاها فقط در زمان اجرا شناسایی می شوند. بنابراین، دریافت خطاهای زمان کامپایل هنگام ساخت برنامه های جاوا اسکریپت غیرممکن است.
دلایل مختلفی وجود دارد که ممکن است خطا رخ دهد: ورودی نامعتبر، خطای سرور یا خطاها، حتی در کد برنامه.
در این مقاله، نحوه رسیدگی به خطاها در جاوا اسکریپت را مورد بحث قرار خواهیم داد تا در صورت بروز خطا، برنامه از کار بیفتد. ما می توانیم این کار را با استفاده از مدیریت استثنا در جاوا اسکریپت انجام دهیم.
مدیریت استثنا به ما اجازه می دهد تا برای خطاهای مختلف ناشی از کاربران برنامه، سرور و بسیاری از دلایل دیگر این خطاها، رفتار سفارشی بنویسیم.
مدیریت استثنا چیست؟
برنامه ها گاهی اوقات با خطا مواجه می شوند. عملیاتی مانند تقسیم یک عدد غیر صفر بر صفر، و نخواندن یک فایل، یک استثنا در کد ما ایجاد می کند.
رسیدگی به خطا رویه/روشی است که برای رسیدگی به رفتار غیرعادی برنامه ما استفاده می شود. این روشی است که برای رسیدگی به احتمال شکست در برنامه ها استفاده می شود.
با کمک مدیریت استثنا، میتوانیم شرایط غیرعادی یا خرابیها را مدیریت کنیم و با پیام مدیریت استثنایی مناسب به کاربر کمک کنیم اقدامات لازم را انجام دهد.
چرا رسیدگی به استثناء مورد نیاز است؟
وقتی کدهای برنامه خطا ایجاد می کنند و استثناهایی را مطرح می کنند، ادامه دادن با کد باقی مانده منطقی نیست. در عوض، ما سعی می کنیم با استفاده از کنترل استثنا، خطا را بازیابی کنیم.
بدون روش های مدیریت مناسب، خطاها ممکن است برنامه را از کار بیندازند و مانع از دستیابی به هدف آن شوند.
مشاهده و رسیدگی به خطاها یا خرابی های احتمالی یک برنامه، برنامه های مرتبط را از قطع یا خرابی بیشتر نجات می دهد.
اگر پاسخ غیرمنتظره ای داده شود و سپس پردازش شود، کاربر اطلاعات نادرست و برداشت بدی از برنامه دریافت می کند.
یک برنامه کاربردی که به خوبی نوشته شده است باید مکانیزم مدیریت استثنا و رویکرد خوبی برای انواع مختلف خطاهایی که احتمالاً در حین استفاده در برنامه اتفاق می افتد داشته باشد.
به جز مدیریت استثنایی، می توانیم این مشکلات را مدیریت کنیم و از خراب شدن برنامه جلوگیری کنیم. با استفاده از مدیریت استثنا، می توانیم جریان یک برنامه را کنترل کنیم.
نحوه رسیدگی به استثناها در جاوا اسکریپت
راه های زیادی برای مدیریت استثناها در جاوا اسکریپت وجود دارد. جاوا اسکریپت مکانیزمی برای کنترل خطاها با استفاده از بلوک try-catch-finally، مشابه زبان هایی مانند جاوا یا C# ارائه می دهد.
مکانیسم را می توان به روش های زیر استفاده کرد:
- بیانیه ها را پرتاب کنید
- سعی کن
- در نهایت تلاش کن
بلوک ها را امتحان کنید
کدهای اجرایی که به احتمال زیاد استثناهایی را ایجاد می کنند یا باعث خطا می شوند در قسمت قرار می گیرند try
مسدود کردن.
در حالی که کد در try
بلوک اجرا می شود، هنگامی که یک خطا شناسایی می شود، خطا را به آن منتقل می کند catch
مسدود می شود و اقدامات لازم در آن انجام می شود catch
مسدود کردن. در صورت عدم انجام اقدامات لازم توسط catch
مسدود کردن، برنامه شروع به رفتار غیرعادی می کند و احتمال وقوع خرابی وجود دارد.
گرفتن بلوک
کدی که باید هنگام بروز خطا در بلوک try اجرا شود، در آن نوشته شده است catch
مسدود کردن. کد رسیدگی به خطا معمولاً در کد نوشته می شود catch
مسدود کردن.
این catch
بلوک می تواند شامل کنترل کننده استثنای تعریف شده توسط کاربر یا کنترل کننده خطای داخلی در جاوا اسکریپت باشد.
توجه داشته باشید که catch
بلوک فقط زمانی اجرا می شود که خطایی از طرف وجود داشته باشد try
مسدود کردن. همچنین ممکن است بیش از یک وجود داشته باشد catch
بلوک برای رسیدگی به استثناهای متعدد.
در نهایت بلوک
این finally
بلوک بدون توجه به وجود خطایی از طرف اجرا خواهد شد try
مسدود کردن.
بیانیه های تلاش برای گرفتن
عبارات Try-catch نه تنها در جاوا اسکریپت رایج هستند، بلکه به طور گسترده در سایر زبان های برنامه نویسی استفاده می شوند. آنها برای رسیدگی به استثناهایی که در کد ایجاد می شوند استفاده می شوند.
جاوا اسکریپت از دستورات try-catch برای به دام انداختن خطاهای زمان اجرا و مدیریت صحیح آنها استفاده می کند.
بلوکهای آزمایشی حاوی کدهایی هستند که ممکن است خطا ایجاد کنند و بلوکهای catch حاوی کدهایی برای رسیدگی به چنین خطاهایی هستند. هنگامی که یک بلوک try با خطا مواجه می شود، بلوک catch فعال می شود. در غیر این صورت، اجرا پس از هر دستور try-catch ادامه می یابد. به عنوان مثال:
try {
thisfunctiondoesnotexit()
}
catch(e) {
console.log(e);
}
در کد بالا سعی می کنیم از تابعی استفاده کنیم که در برنامه وجود ندارد. بلوک try یک خطا به بلوک catch میدهد که آن را به کنسول ثبت میکند.
دستورات Try-Catch-Finally JavaScript
آ try-catch
بیانیه همچنین می تواند با اضافه شده نوشته شود finally
مسدود کردن. کد در finally
بلوک بدون توجه به اینکه خطایی در دستور try رخ دهد اجرا می شود.
در زیر نمونه ای از نحوه انجام آن آورده شده است try-catch-finally
برای رسیدگی به خطاها در جاوا اسکریپت پیاده سازی می شود:
try {
thisfunctiondoesnotexit();
}
catch(e) {
console.log(e);
}
finally {
console.log("Code executed successfully");
}
در این مثال، finally
بلوک بدون توجه به اینکه try
بلوک خطا می دهد. این نحو ساده نحوه رسیدگی به خطاها در جاوا اسکریپت است.
با این حال، خطاها می توانند بسیار پیچیده تر باشند و به صورت حرفه ای تر مدیریت شوند. استفاده كردن throw
دستورات اجازه می دهد تا خطاهای سفارشی به بلوک catch پرتاب شوند، که بر اساس کد موجود در آن مدیریت می شود. catch
مسدود کردن.
بیایید نگاهی به نمونههای پیچیدهتر مدیریت خطای جاوا اسکریپت بیندازیم. ما یک ماشین حساب ساده ایجاد خواهیم کرد که ورودی کاربر را در جاوا اسکریپت می پذیرد و از مدیریت استثنا و وعده ها استفاده می کند.
کد جاوا اسکریپت زیر را در مرورگر خود اجرا کنید و بیایید نحوه عملکرد آن را بفهمیم.
const throwExceptions = () => {
let result
let first = prompt('Enter first number: ')
let second = prompt('Enter second number: ')
try {
if (first == '' || second == '') throw 'Number cannot be empty'
result = first / second
} catch (err) {
console.log(err)
} finally {
console.log(`The division of ${first} & ${second} is ${result}`)
}
}
throwExceptions()
در اینجا، ما یک تابع ایجاد کرده ایم که خطاهای ایجاد شده از کد ما را کنترل می کند.
در کد بالا از کاربر می خواهیم دو عدد را وارد کند. سپس این دو عدد بر یکدیگر تقسیم می شوند که عدد اول صورت و عدد دوم مخرج است.
سپس از جاوا اسکریپت استفاده می کنیم if
و throw
عبارتی برای آزمایش اینکه آیا ورودی داده شده توسط کاربر معتبر است (یعنی خالی بودن آن).
در کد ما، یک خطای سفارشی را با استفاده از throw
بیانیه. همچنین میتوانیم بررسیهای دیگری را روی ورودی کاربر انجام دهیم تا اعتبار را بررسی کرده و خطاها را به کاربر ارسال کنیم catch
در صورت وجود مسدود کنید.
این catch
بلوک خطاها را می گیرد و پیام تعریف شده در آن را نمایش می دهد throw
بیانیه.
این امکان کنترل و مدیریت بهتر جریان برنامه توسط توسعه دهنده را فراهم می کند و همچنین به کاربر کمک می کند تا بداند چه اشتباهی رخ داده است و چرا برنامه نتیجه مورد انتظار را ارائه نمی دهد.
این finally
بلوک بدون توجه به اینکه خطایی رخ داده است اجرا می شود و برای نمایش نتیجه عملیات استفاده می شود، حتی اگر خطایی وجود داشته باشد.
علاوه بر خطاهای تعریف شده توسط throw
بیانیه، سایر خطاها را نیز می توان در بلوک catch گرفت و نمایش داد. این throw
بیانیه فقط به انعطاف پذیری و تعریف خطای سفارشی اجازه می دهد.
با استفاده از try-catch-finally
عبارت در جاوا اسکریپت مثال خوبی از نحوه رسیدگی به استثناها و خطاها است. با این حال، بیشتر وجود دارد.
مدیریت خطاها با وعده های جاوا اسکریپت
همچنین میتوانیم خطاها را با استفاده از وعدههای جاوا اسکریپت شناسایی کنیم. ما همان برنامه را با استفاده از وعده های جاوا اسکریپت خواهیم ساخت. کد زیر را در مرورگر خود اجرا کنید و بیایید نگاهی دقیق تر بیندازیم.
const throwExceptions = (first, second) => {
return promise = new Promise((resolve, reject) => {
if (first == '' || second == '') reject ('Number cannot be empty')
resolve(first / second)
})
}
let first = prompt('Enter first number: ')
let second = prompt('Enter second number: ')
throwExceptions(first, second)
.then(result => console.log(result))
کد بالا به ما کمک کرد تا برنامه ماشین حساب ساده خود را با استفاده از وعده های جاوا اسکریپت مدیریت کنیم. نحوه کار برنامه با قبلی تفاوتی ندارد. فقط اجرا متفاوت است. ما فقط از وعدهها برای رسیدگی مؤثرتر به خطاهایمان استفاده کردهایم.
Promises راه ایده آلی برای رسیدگی به خطاها در کدهای ناهمزمان است. آنها روش های بهتری برای مدیریت عملیات ناهمزمان نسبت به تماس ها و رویدادها ارائه می دهند.
یک شیء وعده جدید را در تابع خود ایجاد و برگرداندیم: throwExceptions
. وعده جدید ما ورودی را آزمایش می کند و در صورت نامعتبر بودن آن را رد می کند.
عملیات پردازش می شود و در صورت معتبر بودن ورودی، نتیجه نمایش داده می شود.
این روشی است که وعده های جاوا اسکریپت کار می کند. با این حال، ما میتوانیم بررسیهای بیشتری انجام دهیم و اطلاعات دقیقتری در مورد خطاها در صورت بروز آنها دریافت کنیم. برای انجام این کار، می توانیم از ابزار نظارت بر خطا Honeybadger استفاده کنیم.
بیایید درک بهتری از نحوه استفاده از این ابزار داشته باشیم.
چگونه با Honeybadger استثنائات را مدیریت کنیم
Honeybadger ابزارهایی برای مدیریت و رفع خطاها در اختیار توسعه دهندگان قرار می دهد. این یکی از بهترین ابزارهای نظارت بر خطا را برای ردیابی و نظارت بر خطاها از کد شما ارائه می دهد.
با ابزار نظارت بر خطا Honeybadger، توسعه دهندگان و مشاغل می توانند خطاهای برنامه را ردیابی و مدیریت کنند و کاربران خود را خوشحال کنند.
من شما را با مراحلی که برای شروع با Honeybadger نیاز دارید و نحوه نظارت بر خطاها در برنامه خود با Honeybadger کار خواهم کرد.
مراحل زیر را دنبال کنید تا Honeybadger را پیکربندی و در برنامه Nodejs خود راه اندازی کنید.
بله، ما کتابخانه Honeybadger را با یک برنامه Node آزمایش خواهیم کرد.
در این اپلیکیشن سعی می کنیم به تابعی دسترسی پیدا کنیم که وجود ندارد. این یک خطا ایجاد می کند. سپس از Honeybadger برای نظارت و دریافت اطلاعات دقیق تر در مورد این خطا استفاده خواهیم کرد.
مرحله 1
با ایجاد یک پروژه Node شروع کنید. یک پوشه ایجاد کنید و نام مناسب خود را به آن بدهید.
mkdir test-app
cd test-app
گام 2
در این برنامه، ما فقط از دو کتابخانه استفاده خواهیم کرد: Express و Honeybadger. دستور زیر را برای نصب این دو کتابخانه در پروژه خود اجرا کنید.
npm install express
npm install @honeybadger-io/js --save
مرحله 3
یک فایل index.js ایجاد کنید و کد زیر را در آن قرار دهید:
const express = require('express');
const app = express();
// Website routing
app.get('/', (req, res) => {
res.send("index");
});
app.listen(port, () => {
console.log('Server is running');
});
این برنامه اجرا نمی شود زیرا ما سعی کرده ایم به متغیری دسترسی پیدا کنیم که در برنامه وجود ندارد. بیایید ببینیم که Honeybadger چگونه به ما برای نظارت بر این خطا کمک می کند.
مرحله 4
همانطور که در تصویر زیر نشان داده شده است، در وب سایت Honeybadger ثبت نام کنید و روی ‘شروع آزمایشی رایگان’ کلیک کنید.
مرحله 5
روی “افزودن پروژه” کلیک کنید و نام پروژه خود را انتخاب کنید. سپس Nodejs را به عنوان زبان انتخاب کنید و یک پروژه ایجاد کنید.
مرحله 6
صفحه بعدی یک کلید پیکربندی را نشان می دهد که می توانید از آن برای ردیابی خطاهای کد خود استفاده کنید. کد خود را با موارد زیر به روز کنید.
const express = require('express');
const Honeybadger = require('@honeybadger-io/js')
Honeybadger.configure({
apiKey: 'hbp_aRzcPWosdNhgU01ETnv25YF2OFF0nD3MiWJj'
})
const app = express();
// Website routing
app.get('/', (req, res) => {
try {
thisfunctiondoesnotexit()
} catch(e) {
Honeybadger.notify(e);
}
res.send("index");
});
app.listen(3000, () => {
console.log(`App Listening at 3000`);
});
در برنامه بالا سعی می کنیم به تابعی دسترسی پیدا کنیم که وجود ندارد. این کد هنگام اجرا یک خطا ایجاد می کند. بیایید نگاهی بیندازیم که چگونه Honeybadger به ما کمک می کند تا این خطا را از حساب Honeybadger خود مدیریت کنیم.
به حساب Honeybadger خود بروید و پروژه ای را که قبلا ایجاد کردیم باز کنید. روی تب error کلیک کنید و ببینید کدام خطا نمایش داده می شود.
اگر با موفقیت برنامه خود را با Honeybadger پیکربندی کرده اید، باید صفحه ای به شکل زیر دریافت کنید.
این صفحه یک ReferenceError را در کد شما نمایش می دهد.
برای دریافت اطلاعات بیشتر در مورد این خطا، روی خطا کلیک کنید. همانطور که در تصویر زیر نشان داده شده است، اطلاعات دقیق تری در مورد خطا در کد برنامه شما نمایش داده می شود:
این صفحه تمام اطلاعات مربوط به خطا در کد شما را نمایش می دهد، مانند پیام خطا، خطایی که خطا رخ داده است و سایر جزئیات مرتبط.
Honeybadger یک ابزار عالی برای توسعه دهندگانی است که مایل به رضایت مشتریان خود و به حداقل رساندن خطاها و اشکالات در برنامه های خود هستند.
ماشینحساب سادهای را که در این مقاله ساختهایم امتحان کنید و ببینید چگونه Honeybadger به شما کمک میکند این خطاها را به راحتی پیگیری کنید.
نتیجه
در این مقاله نحوه مدیریت خطاها در جاوا اسکریپت را یاد گرفتیم. هنگام نوشتن کدهای جاوا اسکریپت، خطاها بسیار رایج هستند.
پیدا کردن خطاها در کد برنامه ممکن است خسته کننده باشد و در صورت وقوع و از کار افتادن برنامه گران باشد. Honeybadger ابزارهای نظارتی را ارائه می دهد که به تشخیص سریعتر و آسانتر خطاها کمک می کند.