آیا حوصله امتحان گرفتن را دارید

رسیدگی به خطاهای در Express با یک واسطه CatchAsync سفارشی
هنگام ساختن برنامه های وب با استفاده از Express ، رسیدگی به خطا یکی از مهمترین جنبه ها برای اطمینان از عملکرد صاف و تجربه کاربر است. رسیدگی به خطای نادرست می تواند منجر به تصادفات غیر منتظره ، بازخورد ضعیف کاربر و ناامیدی عمومی برای توسعه دهندگان و کاربران شود. یک رویکرد محبوب در برنامه های مدرن جاوا اسکریپت استفاده از توابع ناهمزمان است و این جایی است که رسیدگی به خطاها به درستی از اهمیت بیشتری برخوردار می شود.
این صمیمی عملکرد به شما کمک می کند تا کد خود را بهینه کرده و آن را سازماندهی کنید:
import { NextFunction, Request, RequestHandler, Response } from "express";
export const catchAsync = (fn: RequestHandler) => {
return async (req: Request, res: Response, next: NextFunction) => {
try {
await fn(req, res, next);
} catch (error) {
next(error);
}
};
};
چگونه کار می کند
-
یک عملکرد ناهمزمان را می گیرد: عملکرد CatchAsync یک کنترل کننده مسیر ناهمزمان (FN) را دریافت می کند ، که تابعی است که درخواست های دریافتی را پردازش می کند.
-
عملکرد را اجرا می کند: ابزار عملکرد ارائه شده را می پیچد و تضمین می کند که به صورت غیر همزمان اجرا شود. اگر عملکرد به درستی حل شود ، طبق معمول پیش می رود.
-
خطاها را جلب می کند: اگر هنگام اجرای عملکرد ناهمزمان (به عنوان مثال ، در طی یک عملیات پایگاه داده) خطایی رخ دهد ، Middleware CatchAsync خطا را به خود جلب می کند.
-
خطاها را به میان افزار بعدی منتقل می کند: هرگونه خطای گرفتار شده با استفاده از بعدی (خطا) به وسط بعدی منتقل می شود و به شما امکان می دهد با یک کنترل کننده خطای متمرکز ، خطاها را در سطح جهان انجام دهید.
با استفاده از CatchAsync در برنامه خود
در اینجا نحوه استفاده از ابزار CatchAsync در دستگیرندگان مسیر خود آورده شده است:
import express from "express";
import { catchAsync } from "./catchAsync"; // Importing our custom utility
const app = express();
// Sample asynchronous route handler
const getUserData = async (req: Request, res: Response, next: NextFunction) => {
const userData = await fetchUserDataFromDatabase(req.params.id); // Assume async DB call
res.json(userData);
};
// Use the catchAsync utility to wrap your async route handler
app.get('/user/:id', catchAsync(getUserData));
// Global error handler
app.use((err: Error, req: Request, res: Response, next: NextFunction) => {
console.error(err);
res.status(500).send({ error: err.message });
});
app.listen(3000, () => {
console.log("Server is running on http://localhost:3000");
});
مزایای CatchAsync
-
کد پاک کننده: با استفاده از CatchAsync ، از بلوک های تکراری امتحان در هر کنترل کننده مسیر خودداری می کنید ، و باعث می شود کد قابل خواندن و حفظ باشد.
-
رسیدگی به خطای متمرکز: با این ابزار ، همه خطاها (هم همزمان و هم ناهمزمان) گرفتار شده و به یک کنترل کننده خطای مرکزی منتقل می شوند و ساختار کلی برنامه شما را بهبود می بخشند.
-
اشکال زدایی پیشرفته: از آنجا که خطاها به طور مداوم به میان افزار خطای خطای ارسال می شوند ، اشکال زدایی آسان تر می شود. همه خطاها در یک مکان انجام می شود و نیازی به نگرانی در مورد از دست دادن یک خطای خاص نیست.
با احترام ،
ni rimon🌹