كل الأنشطة
- الساعة الماضية
-
Nizar Elhaj بدأ بمتابعة كتب برمجة
-
Omar Mohamed71 اشترك بالأكاديمية
-
ابراهيم الشهاري اشترك بالأكاديمية
-
Neno Gamal Faied اشترك بالأكاديمية
-
عبدالرحمن احمد سلطان عبده سعيد اشترك بالأكاديمية
-
Sami Bady اشترك بالأكاديمية
-
افراح السلامي اشترك بالأكاديمية
-
Ahmad Al Shmali اشترك بالأكاديمية
- اليوم
-
السلام عليكم ورحمة الله تعالى وبركاته، بالنسبة للحصول على الشهادة أرجو الاطلاع على هذه المقالة ويجب أن تحرص على تحقيق جميع الشروط الموجودة لكي تستطيع اجتياز الامتحان النهائي من أجل الحصول على الشهادة: الامتحان والحصول على الشهادة وأرجو الاطلاع على الإجابات التالية أيضا:
-
شيماء مصطفى4 اشترك بالأكاديمية
-
السلام عليكم انا ااريد اعرف كيف اخذ الشهادة عندما انتي من دورة الذكاء الاصطناعي و ما هي الاشياء المطلوبة
- 1 جواب
-
- 1
-
-
Ibrahim Deif اشترك بالأكاديمية
-
Builds Imad اشترك بالأكاديمية
-
للاسف نفس النتيجة الي توصلت لها
-
ممكن فيديو لم افهمك
-
Tarek Mohamed19 بدأ بمتابعة البرمجة بلغة بايثون
-
وعليكم السلام، أحسنت أهنئك على إتمام الدورة بنجاح، أرجو مراجعة شروط التقدم للامتحان من هنا: شروط التقدم للامتحان وأما عن خطوات إجراء الامتحان فهي كالآتي: تواصل مع مركز مساعدة أكاديمية حسوب بحيث تخبرهم برغبتك باجراء الامتحان مع تزويدهم بروابط مشاريعك التي طبقتها أثناء الدورة ويجب أن تكون قد طبقت المشاريع مع المدرب أثناء الدورة، ولا يمكن اجراء امتحان بمشاهدة المحتوى فقط. إجراء محادثة صوتية سيتم تحديد لك موعد لاجراء محادثة صوتية لمدة 30 دقيقة يطرح المدرب فيها أسئلة متعلقة بالدورة ويناقش معك ما نفذته خلالها. مشروع التخرج سيحدد لك المدرب مشروعًا مرتبطًا بما تعلمته أثناء الدورة لتنفيذه خلال فترة محددة تتراوح بين أسبوع الى أسبوعين. مراجعة المشروع والتخرج سيراجع المدرب المشروع الذي أنجزته، وإن سارت جميع الخطوات السابقة بشكل صحيح، ستتخرج وتحصل على الشهادة أو يرشدك المدرّب لأماكن القصور ويطلب منك تداركها ثم التواصل معنا من جديد. أما بشأن مشكلة حجم الملفات الكبير يجب عليك إضافة ملف .gitignore قبل رفع المشاريع ثم تضع فيه على الأقل التالي: node_modules/ dist/ build/ .env وهذا سيمنع رفع الملفات الثقيلة خاصة node_modules التي تولدها أدوات البناء.
-
السلام عليكم ورحمة الله تعالى وبركاته، أهنئك على إتمام الدورة، عمل ممتاز، كما تعلم فإنّ للتقدم للامتحان يجب أن تحرص على تحقيق الشروط التالية: إتمام أربعة مسارات تعليمية على الأقل التطبيق العملي مع المدرب، والاحتفاظ بالمشاريع العملية الناتجة لإرسالها للمراجعة رفع المشاريع على حسابك على GitHub أولا بأول لمشاركتها معنا الخطوة الأولى من خطوات الامتحان هي التواصل مع مركز مساعدة أكاديمية حسوب مع تزويدهم بروابط مشاريعك. بعد ذلك تمر بثلاث خطوات إضافية: محادثة صوتية مع المدرب (30 دقيقة) تنفيذ مشروع التخرج ثم مراجعة المشروع بخصوص مشكلة حجم الملفات الكبير نقوم بتجنب رفع الملفات الثقيلة على GitHub بواسطة .gitignore فلا نرفع مجلدات مثل: node_modules/ dist/ build/ يمكنك رفع الكود المصدري فقط دون الملفات المولدة مما يقلل الحجم بشكل كبير جدا.
-
السلام عليكم ورحمة الله وبركاته، تحية طيبة وبعد، أود إعلامكم بأنني قد أنهيت دورة تطوير واجهات الويب من أكاديمية حاسوب، وأتممت جميع المشاريع المطلوبة بنجاح. وأرغب الآن بالتقدّم إلى الامتحان النهائي للدورة. لكن أواجه حاليًا بعض المشكلات في رفع المشاريع بسبب حجم الملفات الكبير وبعض الصعوبات التقنية الأخرى. لذا أود الاستفسار عمّا إذا كان رفع المشاريع شرطًا أساسيًا للتقدّم إلى الامتحان، أم أن جاهزيتي للامتحان تكفي للمباشرة به دون رفع المشاريع. شاكرٌ لكم تعاونكم وتفضلكم بالإفادة. مع خالص التقدير والاحترام
- 2 اجابة
-
- 2
-
-
وعليكم السلام ورحمة الله تعالى وبركاته، أنصحك بالاطلاع على مواقع التحديات البرمجية والتي توفر مشاكل برمجية وتساعدك على حلها بشكل تدرّجي، مثل موقع LeetCode فه يعتبر المرجع الأساسي للتحضير للمقابلات التقنية في الشركات الكبرى لكنه فعلا يتطلب معرفة قوية بالخوارزميات وهياكل البيانات قبل البدء والمشاكل تتدرج من Easy إلى Hard لكن حتى المستوى السهل قد يكون تحديا للمبتدئين. وأيضا موقع HackerRank وهو أكثر ملاءمة للمبتدئين لأنه يوفر تدرجا أفضل في الصعوبة ويغطي مجالات متنوعة من البرمجة الأساسية إلى الذكاء الاصطناعي وأما المنصات الأخرى مثل CodeWars وCodeforces تركز على المسابقات البرمجية والتحديات المنطقية لكن يمكنك الاعتماد عليها أيضا.
-
وعليكم السلام ورحمة الله تعالى وبركاته، نعم توجد نماذج وخوارزميات OCR دقيقة وفعّالة لقراءة لوحات السيارات لكنها قد تواجه صعوبات حسب جودة الصور واختلاف الخطوط واتجاه اللوحة لذا فالمنهجية الأفضل تعتمد على مرحلتين: أولا استخدام نماذج كشف الأجسام مثل YOLOv5 أو YOLOv7 لتحديد موقع اللوحة بدقة ثم تطبيق نماذج OCR المتخصصة مثل EasyOCR الذي يدعم أكثر من 80 لغة بما فيها العربية أو Tesseract الذي يدعم أكثر من 100 لغة. هناك أيضا Mistral OCR الذي يتميز بدقة عالية في التعامل مع التشكيل العربي والصور منخفضة الجودة. أما بالنسبة للبيانات فالمفتاح الأساسي لتحسين الأداء هو تدريب النموذج على مجموعات بيانات خاصة باللوحات المستهدفة لأن النماذج الجاهزة غالبا ما تكون مدربة على بيانات لاتينية مما يقلل دقتها مع اللوحات العربية لذا ينصح أيضا بتدريب نموذج تعلم عميق مخصص يأخذ بعين الاعتبار خصائص اللوحات المحلية من أبعاد وخطوط وألوان، مع الحرص على جودة الصور لأن الإضاءة الضعيفة والغبار من أبرز أسباب فشل القراءة.
- 2 اجابة
-
- 1
-
-
السلام عليكم ورحمة الله تعالى وبركاته، تعلم UI/UX مهم جدا لمطوري الويب لأنه يحسن جودة المنتجات ويزيد رضا المستخدمين ويميزك في سوق العمل حيث أن المطورين الذين يفهمون التصميم يستطيعون سد الفجوة بين التصميم والتطوير وتحسين تجربة المستخدم ويكون لديهم تواصل بفعالية مع المصممين. وأفضل وقت لتعلمه هو بعد إتقان أساسيات الفرونتاند (HTML, CSS, JavaScript) وقبل أو أثناء العمل على مشاريع حقيقية حيث يمكنك تطبيق مبادئ التصميم مباشرة والأشياء الأساسية التي يجب تعلمها تشمل هي مبادئ ال UI كالألوان وال Typography والتخطيطات إضافة إلى مبادئ UX (User Research، Information Architecture، Usability) وأدوات Prototyping مثل Figma، Visual Design، User Testing.
-
السلام عليكم ورحمة الله تعالى وبركاته، ليس خطأ، لكن استراتيجيا Node.js لا يزال هو المسيطر على سوق العمل في 2025 وأغلب الشركات 40.8% من المطورين عالميا تستخدمه، بينما Bun لا يزال في مرحلة النمو والتبني المحدود والشركات الكبيرة مثلا مثل Vercel وShopify وDiscord بدأت تستخدم Bun لكن كجزء من استراتيجية متعددة وليس كبديل كامل ل Node.js أي أنهم يستخدمونه في حالات محددة أين تحتاج سرعة عالية لكن الأنظمة الأساسية لا تزال على Node.js. وعمليا معرفة Node.js ضرورية للوظائف والعمل الحر لأن الطلب عليها أعلى بكثير وأغلب المشاريع الموجودة مبنية عليها، لكن Bun مهارة إضافية ممتازة أيضا وستعطيك ميزة تنافسية خصوصا في المشاريع الجديدة التي تحتاج إلى أداء عالي.
-
السلام عليكم ورحمة الله تعالى وبركاته، الخوارزمية صحيحة بشكل عام وتحتوي على العناصر الأساسية للعبة لكنها تحتوي على بعض الأخطاء مثلا في الخطوات 8-13 يجب تصحيحه كالتالي فالخطوة 8 يجب أن تكون: "إذا تم الضغط على السهم العلوي يقفز اللاعب للأعلى" بدلا من: "توجه للأمام" لأن في الألعاب ثنائية الأبعاد السهم العلوي يستخدم للقفز وليس للحركة الأمامية، وأيضا الخطوة 9 يجب حذفها واستبدالها ب: "إذا تم الضغط على السهم السفلي يتوقف اللاعب عن الحركة" بدلا من: "توجه للخلف" لأن السهم السفلي في ألعاب المنصات يستخدم للتوقف أو النزول كما أنّ الخطوة 13 يجب تغييرها من: "إذا تم الضغط على زر المسافة توقف" إلى: "إذا تم الضغط على زر المسافة يقفز للأعلى" كبديل للسهم العلوي لأن زر المسافة هو الزر التقليدي للقفز في معظم الألعاب.
-
وعليكم السلام ورحمة الله، أسهل وأدق طريقة لاستخراج العقد (nodes) والعلاقات (edges) من ملف JSON لبناء Graph هي استخدام مكتبة NetworkX في بايثون مع دالة تحليل شجرية تمرّ على كل المفاتيح والقيم داخل ال JSON وتحوّلها تلقائيا إلى عقد وروابط وذلك عبر ربط كل مفتاح بالعقد أو العناصر التي يحتويها. وهذه الطريقة تعمل مع جميع أنواع ملفات JSON حتى المعقدة منها، ولا تحتاج إلى بنية محددة مسبقا مثل وجود nodes أو links وبعد تحويل البيانات إلى رسم بياني باستخدام NetworkX، يمكن عرضها أو تصديرها إلى قاعدة رسوم بيانية مثل Neo4j لاستخدامها في نظام RAGGRAPH لاستخلاص المعرفة.
- 2 اجابة
-
- 1
-
-
السلام عليكم ورحمة الله تعالى وبركاته، أفضل طريقة لاستخراج العقد والعلاقات من JSON لبناء GraphRAG هي استخدام LLM مثل GPT-4 وذلك مع مكتبات مخصصة بدلا من كتابة أكواد يدوية معقدة والمكتبات الرئيسية الموثوقة هي: Neo4j GraphRAG Python Package وهي توفر SimpleKGPipeline لاستخراج تلقائي للعقد والعلاقات باستخدام prompts محددة مسبقا وتدعم تخصيص ال schema من خلال أنواع العقد والعلاقات المطلوبة وLlamaIndex التي تقدم GraphRAGExtractor مع دالة parsing جاهزة لتحويل استجابة LLM إلى EntityNode و Relation objects مباشرة. وكلا المكتبتين تستخدم LLM لقراءة النص/JSON وإرجاع العقد والعلاقات بصيغة JSON منظمة: {"nodes": [...], "relationships": [...]} ثم تحفظها مباشرة في Neo4j Graph Database لكن إذا كان JSON معقد ومتداخل يمكنك استخدام NetworkX لبناء ال graph بعد parsing بسيط باستعمال Python script لكن الطريقة الأكثر فعالية هي تمرير محتوى JSON لل LLM مع prompt واضح يحدد schema المطلوب ثم parsing النتيجة مباشرة لل graph database.
- 2 اجابة
-
- 1
-
-
السلام عليكم ورحمة الله تعالى وبركاته، هذا السؤال يندرج ضمن أسئلة الامتحانات والمسابقات، ونحن في أكاديمية حسوب لا نقوم بالإجابة على هذا النوع من الأسئلة. ومن الأفضل تعلم هذه المفاهيم بنفسك، ثم محاولة حلّ الأسئلة باجتهادك الخاص وفي حال لم تفهمي شيئا معينا أو واجهك خطأ في التشغيل يمكنك طرح سؤالك هنا في قسم الأسئلة العامة وسنجيبك عليه بكل صدر رحب. أنصحك بالاستعانة بالتوثيق الرسمي ل Access كمصدر تعلم رسمي ووموثوق من هنا: Access Docs
-
السلام عليكم لدي ملف json واريد استخراج العقد والعلاقات منه لبناء Graph وبعدها استخدام RAGGRAPH ولكن المشكلة التي واجهتني هي صعوبة استخراج العقد والعلاقات فهل يوجد طريقة سهله او واضحة لإستخراج العقد اما من مكتبة او كود مع اني استخدمت اكواد عديده ولكن لم تفي بالغرض
- 2 اجابة
-
- 2
-
-
السلام عليكم ورحمة الله تعالى وبركاته، هل المشكلة لا تزال مستمرة إلى الآن؟ في حال كان كذلك فهذه المشكلة قد تكون وقعت لأنّ الخادم المجاني على Render يتوقف تلقائيا بعد 15 دقيقة من عدم النشاط (inactivity) وليس نصف ساعة بالضبط لكن بعض المستخدمين يلاحظون التوقف في أوقات متقاربة وهذا السلوك مصمم ضمن سياسة الخطة المجانية (Free Tier) حيث يدخل الخادم في وضع Sleep عند عدم استقبال طلبات HTTP لمدة 15 دقيقة وعند أول طلب لاحق يستغرق إعادة التشغيل (spin up) حوالي 30-50 ثانية مما يسبب استجابة بطيئة جدا. يمكن حل المشكلة من خلال عمل Self-Ping من داخل الكود بحيث تقوم بإضافة دالة في index.js أو app.js تقوم بإرسال طلب GET لنفس عنوان خادمك كل 10إلى 14 دقيقة باستخدام setInterval مع مكتبة axios مما سيبقي الخادم مستيقظا باستمرار.
-
السلام عليكم ورحمة الله تعالى وبركاته، هل تقصدين دورة الذكاء الاصطناعي؟ في حال ذلك فجهازك بمواصفاته الحالية: كاف تماما لإكمال دورة الذكاء الاصطناعي بنجاح لكن بشرط فهم التقسيم الوظيفي التالي فستستخدمين جهازك المحلي لكتابة الأكواد وتنفيذ مكتبات Python الأساسية (NumPy, Pandas, Matplotlib) وتشغيل نماذج صغيرة للتجربة 1B-3B parameters أي بأداء معقول وسرعة استجابة منخفضة بعض الشيء ومعالجة datasets صغيرة ومتوسطة الحجم بفضل ال 24GB RAM الممتازة بينما ستعتمد حصريا على Google Colab المجاني الذي يوفر GPU مثل Tesla T4 أو V100 لتدريب نماذج التعلم العميق الحقيقية (CNNs, RNNs, Transformers) لأن Intel HD 620 لا تعطي أي تسريع مقارنة بالمعالج CPU حتى مع TensorFlow-DirectML ويمكن أن تفشل في معماريات معقدة مثل ResNet بينما GPU مخصص مثل NVIDIA يكون أسرع بـ 12 ضعفا من DirectML على Intel. لكن الحد الأساسي في Colab المجاني هو 12 ساعة متواصلة للجلسة الواحدة مع قيود استخدام ديناميكية غير موثقة قد تمنعك مؤقتا من الوصول لل GPU إذا استهلكت موارد كثيرة لكنها كافية للتعلم والمشاريع التعليمية وليست لمشاريع production كبيرة ومعقدة.
-
السلام عليكم ورحمة الله تعالى وبركاته، أكيد لا يمكن أن تتعلم كل هذه التقنيات والأدوات من خلال الإجابة على سؤالك، فيجب البحث عن العديد من المصادر ومتابعتها مع التطبيق العملي والاستمرارية للتمكن من ذلك، أو يمكنك الاستعانة بمستقل لينجز لك كل ما سبق. فلبناء نظام React + Laravel 11 بتعدد الأدوار والصلاحيات على نفس الرابط يمكنك استخدام Laravel Sanctum للمصادقة مع Spatie Laravel-Permission لإدارة الأدوار (roles) والصلاحيات (permissions) حيث يقوم React بإرسال token عند كل طلب API ويستجيب Laravel بالبيانات والصفحات حسب دور المستخدم المسجل في قاعدة البيانات. وللنشر على نفس الدومين يمكنك وضع Laravel في مجلد /api وReact في الجذر / عبر إعدادات Apache أو Nginx بحيث يوجه السيرفر طلبات /api/* إلى Laravel/public وباقي الطلبات إلى React build مع تفعيل HTTPS وتشفير البيانات الحساسة في قاعدة البيانات باستخدام دوال Laravel encrypt() وdecrypt() على حقول Models أو تفعيل MySQL encryption-at-rest للأمان الكامل. في حال كان هذا المشروع تعليميا وكنت في بداياتك فجميل أن تتعلم بنفسك خطوة بخطوة دون تسرع، أما إذا كان المشروع مهنيا فمن الأفضل أن تستعين بمستقل لينجزه على أكمل وجه.
-
السلام عليكم ورحمة الله تعالى وبركاته، بالنسبة لمساري "التعامل مع البيانات" و"تحليل البيانات" فيجب أن يسبقا "تعلم الآلة" من الناحية المنطقية لأنك لا تستطيع تطبيق خوارزميات تعلم الآلة دون فهم كيفية التعامل مع البيانات وتحليلها وهذا موجود فعلا فمسار تعلم الآلة يأتي بعد مسار تحليل البيانات. كما أننا هنا نعتمد التدرج التعليمي ففي الدورة لم يتم وضع "تحليل البيانات" مباشرة قبل "تعلم الآلة" فقط بل تم وضعه بعد مسار "تطبيقات عملية على النماذج النصية الكبيرة LLMs" والسبب هو أن التطبيق العملي يأتي أولا فالفكرة هنا هي أن تتعلم كيف تستخدم النماذج الجاهزة (LLMs) في البداية، ثم تطبق ما تعلمته على تحليل البيانات الفعلي، وهذا يجعل التعلم أكثر تفاعلية وأقل جفافا من الناحية النظرية.
-
السلام عليكم ورحمة الله تعالى وبركاته، تعلم لغة Golang قد يفيدك في المجتمع العربي هذا أمر ممكن، خاصة مع تزايد استخدامها في مشاريع تطوير البرمجيات السحابية والتطبيقات عالية الأداء وحتى الخدمات المصغرة لاحظت إقبالا عليها. كما أن هناك مجتمع متنامي من مطوري Go في الدول العربية ويتوفر دعم جيد للغة وللغة العربية في بعض المكتبات كما أن Golang تحظى بشعبية في مراكز التكنولوجيا في الشرق الأوسط وحجم الطلب على مطوريها يبقى في تزايد مما يجعل تعلمها مهارة قيمة قد تفتح فرص عمل وتقنيّة تنافسية.
-
السلام عليكم ورحمة الله تعالى وبركاته، أولا مبارك عليك إنهاء الدورة وحصولك على الشهادة، وكما تعلم فإن أكاديمية حسوب تقدم دعما مميزا بعد حصولك على الشهادة من خلال منحة كتابة السيرة الذاتية المجانية على منصة بعيد بقيمة 99 دولار والتي تشمل مقابلة صوتية مع فريق أخصائي التوظيف لكتابة سيرة ذاتية مخصصة، بالإضافة إلى متابعة ضبط حسابك على منصات العمل الحر مثل مستقل وخمسات، مع تقديم نصائح مخصصة لمساعدتك في الحصول على عملك الأول. كما أن الأكاديمية لا تضمن لك وظيفة مباشرة، لكنها تقدم دعما قويا لزيادة فرصك في العثور على عمل عن طريق تحسين سيرتك الذاتية وتوجيهك لاختيار العملاء المناسبين، والنصائح حول التفاعل مع سوق العمل، مع ضمان استرداد كامل قيمة الدورة في حال لم تتحصل على عمل خلال 6 أشهر لذا لا يجب التوقف الآن، بل يجب العمل والمتابعة مع الفريق المسؤول عن ذلك.
-
السلام عليكم ورحمة الله تعالى وبركاته، هذا التكرار يكون طبيعيا عند وجود عدة بنود في نفس الفاتورة ويجب التعامل معه إما بتلخيص البيانات أو بتصميم التقرير بشكل صحيح مثلا يمكن استخدام فيه تقسيم المجموعات (Grouping) داخل تقرير Crystal Report على أساس "invoice_number" لعرض بيانات الفاتورة مرة واحدة مع تكرار فقط تفاصيل البنود تحتها ولا تستخدم SELECT DISTINCT في الاستعلام لأنه سيحذف تفاصيل البنود الصحيحة أولا استعلم كل البيانات المفصلة كما في استعلامك الحالي بنحو: SELECT i.invoice_number, i.invoice_date, i.customer_name, d.item_name, d.quantity, d.unit_price, i.total_amount, i.total_ar, d.store_number FROM Invoices i INNER JOIN InvoiceDetails d ON i.invoice_number = d.invoice_number WHERE i.invoice_number = @invoice_number بعد تحميل البيانات في تقرير CrystalReport4 قم داخل برنامج Crystal Reports بإنشاء Group Based on "invoice_number" أو حسب العمود المناسب للفواتير ثم ضع بيانات الفاتورة (الرقم، التاريخ، الاسم، المجموع) في قسم Group Header ليظهر مرة واحدة لكل فاتورة. وضع بيانات البنود كاسم العنصر والكمية وسعر الوحدة ورقم المخزن في Detail Section ليظهر كل بند في صف منفصل لكن إذا لاحظت تكرار في بعض الحقول يمكنك تفعيل خاصية "Suppress Duplicates" على الحقول التي تريد إظهارها مرة واحدة فقط.
-
وعليكم السلام ورحمة الله تعالى وبركاته، يفضل أن تعتمد استراتيجية متوازنة تجمع بين بناء وتطوير الشبكات العصبية العميقة وتجربة عدة خوارزميات تقليدية في تعلم الآلة، لماذا؟ لأن لكل منهما نقاط قوة ومجالات استخدام مميزة فالشبكات العصبية العميقة مناسبة جدا عندما تتعامل مع بيانات ضخمة ومعقدة وغير منظمة مثل الصور أو الصوت أو النصوص حيث تتميز بقدرتها على استخراج الخصائص تلقائيا وتحقيق دقة عالية في مشكلات نمط معقد. بالمقابل الخوارزميات التقليدية في تعلم الآلة مثل الانحدار اللوجستي، أشجار القرار، وآلات الدعم الناقل تتميز ببساطتها وسرعة التدريب على بيانات صغيرة أو متوسطة الحجم وقابليتها العالية للتفسير مما يجعلها أفضل في حالات حيث يكون حجم البيانات محدودا أو حيث تكون الشفافية في شرح النتائج ضرورية. وأضيف لك أن دقة النموذج وفعاليته تعتمد بشكل كبير على طبيعة المشكلة وحجم البيانات المستعملة ودرجة تعقيد العلاقات بين المتغيرات لذلك من الأفضل اختبار ومقارنة الخوارزميات المختلفة بناء على هذه العوامل.
-
السلام عليكم ورحمة الله تعالى وبركاته، هل لا تزال المشكلة قائمة إلى الآن؟ في حال كانت كذلك أرجو الاطلاع على هاته الإجابة. المشكلة في الخطأ الذي ظهر لك: Cast to ObjectId failed for value 'cart' (type string) at path '_id' for model 'Book سببها أن لديك في ال Router endpoint /cart و /cart/:id وعند استدعاء GET /api/book/cart يمرر اسم "cart" كمعرّف بدل ObjectId في استعلام الكتاب وذلك بسبب ترتيب تعريف الروتس في الكود ففي الترتيب الحالي: bookRouter.get('/:id', getBookById); bookRouter.get('/cart', isAuthenticate, getCartUser); إذا جاء الطلب ل /cart بدون معرّف هنا Express يطابقه أولا مع /api/book/:id ويعتبر "cart" هو المعرف ويدخله ك param في getBookById، وبالتالي يبحث في قاعدة البيانات عن كتاب معرفه "cart" فيفشل ال cast إلى ObjectId لحل المشكلة يجب تغيير ترتيب تعريف الروتس بحيث تكون المسارات الثابتة مثل /cart قبل المتغيرة مثل /:id هكذا: bookRouter.get('/cart', isAuthenticate, getCartUser); bookRouter.get('/:id', getBookById); لتكون في النهاية هكذا: bookRouter.get('/', getAllBooks); bookRouter.get('/cart', isAuthenticate, getCartUser); bookRouter.post('/cart/:id', isAuthenticate, addToCart); bookRouter.delete('/cart/:id', isAuthenticate, deleteBookCart); bookRouter.get('/favorite', isAuthenticate, getFavoriteUser); bookRouter.post('/favorite/:id', isAuthenticate, addToFavorite); bookRouter.delete('/favorite/:id', isAuthenticate, deleteFavorite); bookRouter.get('/user', isAuthenticate, getBooksUser); bookRouter.put('/:id', isAuthenticate, updateBook); bookRouter.delete('/:id', isAuthenticate, deleteBook); bookRouter.get('/:id', getBookById); bookRouter.post('/upload', isAuthenticate, upload.single("image"), uploadBook); bookRouter.post('/profile', isAuthenticate, profileUser);
