انواع مختلفی از خطاها را که می توانید کنترل کنید و اینکه چگونه می توانید از Express.js برای مقابله با آنها استفاده کنید، کشف کنید.
نکات کلیدی
- خطاها در برنامه های Express.js را می توان به خطاهای نحوی و زمان اجرا، اعتبارسنجی ورودی و خطاهای کاربر، خطاهای مربوط به پایگاه داده و شبکه، و خطاهای API و سرویس های شخص ثالث طبقه بندی کرد.
- گرفتن و ثبت خطاها در کنسول یک راه ساده برای رسیدگی به خطاها در مراحل توسعه و اشکال زدایی در Express.js است. بستههای رسیدگی به خطا مانند express-error-handler عملکرد آمادهای برای مدیریت و پاسخ به خطاها ارائه میکنند.
- مدیریت خطاهای همزمان و ناهمزمان با استفاده از بلوک های try-catch یک تکنیک موثر در Express.js است. برای عملیات ناهمزمان، ادغام کلمات کلیدی async و انتظار در بلوکهای try-catch میتواند مدیریت خطا را بهبود بخشد. ایجاد میانافزار سفارشی رسیدگی به خطا، امکان یک رویکرد متمرکز و متناسب را برای مدیریت خطا فراهم میکند.
در یک سناریوی ایدهآل، APIها و سرویسهای باطن خود را میسازید، آنها را برای تولید مستقر میکنید، سپس مینشینید و استراحت میکنید در حالی که دیگران از آنها استفاده میکنند. متأسفانه، در دنیای واقعی، برنامه هایی که می نویسید تقریباً مطمئناً حاوی خطاها و باگ هستند.
به همین دلیل، هنگام توسعه APIهای Express.js و خدمات باطن، مهم است که نحوه رخ دادن خطاهای مختلف و نحوه مدیریت موثر آنها را در نظر بگیرید.
با پیشبینی چنین سناریوهایی، میتوانید اطمینان حاصل کنید که برنامههای شما نه تنها با خرابیها به طور مؤثر برخورد میکنند، بلکه تجربهای بینظیر را برای کاربران فراهم میکنند.
انواع رایج خطاها در برنامه های Express.js
هنگام توسعه برنامه های Express.js، با انواع مختلفی از خطاها مواجه خواهید شد، از جمله:
- خطاهای نحوی و زمان اجرا: خطاهای نحوی زمانی رخ می دهد که اشتباهاتی در نحو کد وجود داشته باشد، به این معنی که برنامه نمی تواند اجرا شود. از سوی دیگر، خطاهای زمان اجرا زمانی رخ می دهد که برنامه در حال اجرا است، معمولاً به دلیل شرایط غیرمنتظره یا داده های نادرست.
- اعتبار سنجی ورودی و خطاهای کاربر: این خطاها زمانی رخ می دهند که کاربران در طول تعامل با برنامه، داده های ناکافی یا نامعتبر ارائه می دهند. این خطاها میتوانند به اشکال مختلف، مانند از دست دادن فیلدهای مورد نیاز، فرمتهای داده نادرست، یا مقادیری که معیارهای خاصی را برآورده نمیکنند، ظاهر شوند.
- خطاهای مربوط به پایگاه داده و شبکه: خطاهای مربوط به پایگاه داده و شبکه ممکن است زمانی رخ دهد که در اتصال به پایگاه داده مشکلی وجود داشته باشد یا زمانی که ارتباط با برنامه های خارجی از طریق شبکه با مشکل مواجه شود. اگر برنامه شما برای کار به شبکه متکی باشد، این خطاها می توانند به ویژه دردسرساز شوند.
- API شخص ثالث و خطاهای سرویس: همچنین ممکن است هنگام تعامل با APIها یا سرویس های خارجی، خطاها ایجاد شود. هنگام درخواست از سیستم های خارجی، ممکن است مشکلات مختلفی ایجاد شود. به عنوان مثال، API ممکن است خرابی را تجربه کند، پاسخهایی را با خطا به دلیل پارامترهای نامعتبر برگرداند، یا قالبهای داده غیرمنتظره را برگرداند.
تکنیکهای مختلفی وجود دارد که میتوانید از آنها برای مدیریت مؤثر خطاها در APIهای REST Express.js و خدمات باطن خود استفاده کنید.
1. گرفتن و ثبت خطاها به کنسول
یک راه ساده برای رسیدگی به خطاها، شناسایی آنها و ثبت جزئیات در کنسول است. این رویکرد به شما کمک می کند تا خطاها را در مراحل توسعه و اشکال زدایی شناسایی کنید.
با استفاده از console.error()، می توانید بینشی در مورد ماهیت و محل خطاها در برنامه خود به دست آورید. در اینجا یک مثال کد است:
app.get('/example', (req, res) => {
try {
// Code that may cause an error
const result = someFunction();
res.json(result);
} catch (error) {
console.error('Error occurred:', error);
res.status(500).json({ message: 'An error occurred.' });
}
});
2. استفاده از بسته های رسیدگی به خطا
Express.js چندین بسته میانافزار مدیریت خطا را برای سادهسازی مدیریت خطا ارائه میدهد. یکی از این بستهها، کنترل کننده خطای اکسپرس است – این بستهها با ارائه قابلیتهای آماده برای استفاده، مانند پیامهای خطای سفارشی و ویژگیهای ثبت خطا، رسیدگی و پاسخ به خطاها را آسانتر میکنند.
برای استفاده از این بسته، باید آن را در پروژه خود نصب کنید:
npm install express-error-handler
پس از نصب، میتوانید از ویژگیهای آن برای افزایش قابلیتهای مدیریت خطای برنامه خود استفاده کنید.
const errorHandler = require('express-error-handler');
// Register the error-handling middleware
app.use(errorHandler({
static: {
'404': 'path/to/404.html'
}
}));
به عنوان مثال، در مثال بالا، فرض کنید یک کاربر مسیری را درخواست می کند که وجود ندارد. تابع handler کاربر را به صفحه خطای سفارشی 404، 404.html راه اندازی کرده و هدایت می کند. این اطمینان حاصل می کند که برنامه Express.js به طور موثر خطای صفحه یافت نشد را مدیریت می کند.
اساساً، این بستهها رویکرد کاربرپسندتری را برای مدیریت خطاهایی که ممکن است ایجاد شود ارائه میکنند.
3. مدیریت خطاهای همزمان و ناهمزمان با استفاده از بلوک های Try-Catch
مدیریت خطاهای برنامه نویسی همزمان و ناهمزمان با استفاده از بلوک های try-catch یک تکنیک موثر در Express.js است. برای کد همزمان، میتوانید با قرار دادن بخش احتمالی خطا در یک بلوک try-catch، خطاها را مدیریت کنید.
در اینجا یک نمونه کد وجود دارد که بلوکهای آزمایشی در حال استفاده را نشان میدهد:
app.get('/data', (req, res) => {
try {
// code that may cause an error
const result = someFunction();
res.json(result);
} catch (error) {
console.error('Error occurred:', error);
res.status(500).json({ message: 'An error occurred.' });
}
});
با این حال، هنگام کار با عملیات ناهمزمان مانند کوئری های پایگاه داده یا استفاده از Axios برای مصرف APIها، بلوک های try-catch به تنهایی ممکن است کافی نباشند. در چنین مواردی، اکنون میتوانید همگامسازی را ادغام کنید و منتظر کلمات کلیدی درون بلوکها بمانید تا خطاها را کارآمدتر مدیریت کنید.
در اینجا چند کد نمونه وجود دارد:
app.get('/data', async (req, res) => {
try {
const data = await fetchDataFromDatabase();
res.json(data);
} catch (error) {
console.error('Async Error:', error);
res.status(500).json({ message: 'Error occurred fetching data.' });
}
});
4. ایجاد میان افزار سفارشی مدیریت خطا
میانافزار سفارشی رسیدگی به خطا به شما این امکان را میدهد تا با توجه به نیازهای برنامه خود، نحوه مدیریت خطاها و پاسخهای مربوط به آنها را تعریف کنید.
با ایجاد توابع میانافزار رسیدگی به خطا، میتوانید مدیریت خطا را متمرکز و سفارشی کنید و از یک رویکرد سازمانیافتهتر و متناسبتر برای رسیدگی به خطاها در کل برنامه اطمینان حاصل کنید.
در اینجا یک نمونه کد تابع میان افزار سفارشی آمده است:
// Custom middleware for handling not found errors
const notFoundHandler = (req, res, next) => {
const resource = req.params.resource;
if (resource === 'users') {
return res.status(404).json({ message: 'User not found.' });
} else if (resource === 'products') {
return res.status(404).json({ message: 'Product not found.' });
} else {
return res.status(404).json({ message: 'Requested resource not found.' });
}
};
app.use('/api/:resource', notFoundHandler);
در این مثال، تابع notFoundHandler پارامتر منبع را در URL درخواست بررسی می کند. بسته به مقدار ارائه شده، تابع کنترل کننده با پیام های خطای سفارشی برای انواع مختلف منابع، مانند کاربران و محصولات، پاسخ می دهد.
برای هر منبع دیگری که به طور صریح مدیریت نمی شود، یک پیام خطای عمومی ارائه می دهد. از طرف دیگر، در این میانافزار، میتوانید کاربران را به صفحات خطای سفارشی هدایت کنید که به آنها در حل مشکلاتی که با آنها برخورد کردهاند کمک میکند.
با استفاده از این میانافزار سفارشی رسیدگی به خطا، میتوانید مدیریت خطا و پاسخها را به موقعیتهای مختلف تنظیم کنید و رسیدگی به خطا را خاصتر و آموزندهتر کنید.
5. استفاده از ابزارهای ثبت خطا و نظارت در تولید
در یک محیط تولید، اجرای ثبت و نظارت خطا برای پیگیری خطاهای برنامه ضروری است. برخی از ابزارهای موثری که می توانید استفاده کنید شامل وینستون و مورگان، در میان دیگران است. این ابزارها خطاها را در یک فایل، یک سرور متمرکز یا یک پلت فرم نظارت ثبت میکنند و به شما امکان میدهند به سرعت مشکلات را شناسایی و حل کنید.
در اینجا مثالی از نحوه استفاده از Winston در یک برنامه Express.js برای ثبت خطا آورده شده است:
const winston = require('winston');
const expressWinston = require('express-winston');
app.use(expressWinston.errorLogger({
// Error logging middleware using Winston
}));
مدیریت خطا در برنامه های کاربردی Backend
پیادهسازی تکنیکهای مدیریت خطا کارآمد و رویههای ایمن در ساختن برنامههای کاربردی قوی ضروری است.
در برنامههای Express.js، پیشبینی، برنامهریزی و پیادهسازی تکنیکهای مؤثر رسیدگی به خطا که به شما امکان میدهد به سرعت خطاها را شناسایی، مدیریت و پاسخ دهید، مهم است. این یک تجربه قابل اعتمادتر و کاربرپسندتر را برای کاربران شما تضمین می کند.