اذهب إلى المحتوى

السؤال

نشر

أعمل على موقع تجارة الكترونى واحتاج الى المساعدة لا احد يساعدنى غيركم

الموقع لا يستجيب عند اتمام الشراء يطلب منى عنوان رغم انى اضفت عنوان ومتأكد ان الكود صحيح

وخانة التعليقات والتقيمات للمنتح لا تعمل

اريد حل هذه الاخطاء مع الشرح لو سمحتم وفحص لكامل الاخطاء الاخرى وتوضيحها مع الشرح شكرا لكم مقدماclickBuy project.rar

Recommended Posts

  • 0
نشر

مرحبا أحمد .

يجب أن تتعلم كيفية تتبع الأخطاء حتى يكون مستواك متقدما وتستطيع إكتشاف الأخطاء بمفردك .

والآن لنكتشف الأخطاء معا :

اولا إن الطلب لا يتم عند إتمام الشراء حيث يخبرك أنه مطلوب عنوان وأنت بالفعل إخترت العنوان .

ولاحظ أنك عند إختيار العنوان تتاكد أولا منه فى قاعدة البيانات . حيث حينما تقوم بإختيار عنوان يتم إرسال طلب إلى الخادم .

والآ لنقم بفتح تبويبة network فى ادوات المطورين لنكتشف الخطأ ستجد أن الخطأ الذى يظهر لك هو أن المسار غير معرف .

image.png.943e7ac9c1c9bd8d5fb2368caddf8b63.png

ستجد أنك لم تقم بتعريف ال Route الذى يقوم بإرجاع العنوان بال id فى الخادم . لذلك لنقم بإنشاءه .

في ملف back-end\services\addressService.js لنقم بإنشاء الدالة التى تقوم بإرجاع العنوان بناء على ال id كالتالي :

exports.getAddresse = asyncHandler(async (req, res, next) => {
  const user = await User.findById(req.user._id).populate('addresses');
  let address=[];
  user.addresses.forEach(element => {
    if(element._id == req.params.addressId) return address.push(element);
  });

  res.status(200).json({
    status: 'success',
    results: address.length,
    data: address,
  });
});

و الآن في ملف back-end\routes\addressRoute.js لنقم بتعريف مسار جديد وتمرير الدالة السابقة له هكذا  .:

const express = require('express');

const authService = require('../services/authService');

const {
  addAddress,
  removeAddress,
  getLoggedUserAddresses,
  getAddresse
} = require('../services/addressService');

const router = express.Router();

router.use(authService.protect, authService.allowedTo('user'));

router.route('/').post(addAddress).get(getLoggedUserAddresses);
router.get('/:addressId',getAddresse);
router.delete('/:addressId', removeAddress);

module.exports = router;

وهكذا تم حل أول مشكلة و ستجد أنك تستطيع الآن ان تتم عملية الشراء .

نأتى للخطأ الثانى وهو عدم اضافة التعليق والتقيم :

لنقم بفتح خانة Network كما في السابق وعند إرسال الطلب الخاص بإضافة التعليق ستجد رسالة الخطأ تخبرك ان ratings لم يتم إرسالها و هى مطلوبة 

image.png.5a0b3ceaa0a5fdaf10834e921170fd15.png

وإذا نظرنا إلى ما تقوم بإرساله ستجد أنك تقوم بإرسال rating بدلا من ratings لهذا هو يعتبر أنك لم تقم بإرسال أى تقيم 

image.png.6525d346b26b1b8c656eb13d8ce3fca0.png

وحل تلك المشكلة في ملف front-end\src\hook\review\add-rate-hook.js سطر رقم 38 قم فقط بإضافة حرف s هكذا :

ratings: rateValue

والآن سيعمل معك بشكل جيد وتستطيع إضافة أى تقيم .

وقد قمت بإرفاق الملفات السابقى بعد التعديل .

addressRoute.js addressService.js

  • 0
نشر
بتاريخ 33 دقائق مضت قال محمد_عاطف:

مرحبا أحمد .

يجب أن تتعلم كيفية تتبع الأخطاء حتى يكون مستواك متقدما وتستطيع إكتشاف الأخطاء بمفردك .

والآن لنكتشف الأخطاء معا :

اولا إن الطلب لا يتم عند إتمام الشراء حيث يخبرك أنه مطلوب عنوان وأنت بالفعل إخترت العنوان .

ولاحظ أنك عند إختيار العنوان تتاكد أولا منه فى قاعدة البيانات . حيث حينما تقوم بإختيار عنوان يتم إرسال طلب إلى الخادم .

والآ لنقم بفتح تبويبة network فى ادوات المطورين لنكتشف الخطأ ستجد أن الخطأ الذى يظهر لك هو أن المسار غير معرف .

image.png.943e7ac9c1c9bd8d5fb2368caddf8b63.png

ستجد أنك لم تقم بتعريف ال Route الذى يقوم بإرجاع العنوان بال id فى الخادم . لذلك لنقم بإنشاءه .

في ملف back-end\services\addressService.js لنقم بإنشاء الدالة التى تقوم بإرجاع العنوان بناء على ال id كالتالي :

exports.getAddresse = asyncHandler(async (req, res, next) => {
  const user = await User.findById(req.user._id).populate('addresses');
  let address=[];
  user.addresses.forEach(element => {
    if(element._id == req.params.addressId) return address.push(element);
  });

  res.status(200).json({
    status: 'success',
    results: address.length,
    data: address,
  });
});

و الآن في ملف back-end\routes\addressRoute.js لنقم بتعريف مسار جديد وتمرير الدالة السابقة له هكذا  .:

const express = require('express');

const authService = require('../services/authService');

const {
  addAddress,
  removeAddress,
  getLoggedUserAddresses,
  getAddresse
} = require('../services/addressService');

const router = express.Router();

router.use(authService.protect, authService.allowedTo('user'));

router.route('/').post(addAddress).get(getLoggedUserAddresses);
router.get('/:addressId',getAddresse);
router.delete('/:addressId', removeAddress);

module.exports = router;

وهكذا تم حل أول مشكلة و ستجد أنك تستطيع الآن ان تتم عملية الشراء .

نأتى للخطأ الثانى وهو عدم اضافة التعليق والتقيم :

لنقم بفتح خانة Network كما في السابق وعند إرسال الطلب الخاص بإضافة التعليق ستجد رسالة الخطأ تخبرك ان ratings لم يتم إرسالها و هى مطلوبة 

image.png.5a0b3ceaa0a5fdaf10834e921170fd15.png

وإذا نظرنا إلى ما تقوم بإرساله ستجد أنك تقوم بإرسال rating بدلا من ratings لهذا هو يعتبر أنك لم تقم بإرسال أى تقيم 

image.png.6525d346b26b1b8c656eb13d8ce3fca0.png

وحل تلك المشكلة في ملف front-end\src\hook\review\add-rate-hook.js سطر رقم 38 قم فقط بإضافة حرف s هكذا :

ratings: rateValue

والآن سيعمل معك بشكل جيد وتستطيع إضافة أى تقيم .

وقد قمت بإرفاق الملفات السابقى بعد التعديل .

addressRoute.js 490 B · 0 تنزيلات addressService.js 1.89 kB · 0 تنزيلات

شكرا لك تم حل المشكلة ولكنى عندى سؤال اخر لو تكرمت

ظهرت مشكلة اخرى عن اضافة عنوان جديد والضغط هنا يحولنى لصفحة بيضاء

وهنا الخطأ فى inspect انا لا افهمة صرحة 

image.png

image.png

  • 0
نشر
بتاريخ 1 دقيقة مضت قال Ahmed Malek:

شكرا لك تم حل المشكلة ولكنى عندى سؤال اخر لو تكرمت

ظهرت مشكلة اخرى عن اضافة عنوان جديد والضغط هنا يحولنى لصفحة بيضاء

وهنا الخطأ فى inspect انا لا افهمة صرحة 

لا يتم إعادة مصفوفة في خاصية data، قم بطباعة data وتفقد ما الذي يتم إعادته، فأنت حاليًا تحاول استخدام ميثود map على مصفوفة لكن data ليست مصفوفة، لذا map غير متاحة.

  • 0
نشر
بتاريخ 2 دقائق مضت قال Mustafa Suleiman:

لا يتم إعادة مصفوفة في خاصية data، قم بطباعة data وتفقد ما الذي يتم إعادته، فأنت حاليًا تحاول استخدام ميثود map على مصفوفة لكن data ليست مصفوفة، لذا map غير متاحة.

هل من الممكن ان توضح اكثر بالكود لو سمحت؟

  • 0
نشر
بتاريخ On 26‏/5‏/2024 at 22:06 قال Ahmed Malek:

هل من الممكن ان توضح اكثر بالكود لو سمحت؟

هل تم حل المشكلة؟

للتوضيح:

const data = fetchDataFromServer();

console.log(data); // قم بطباعة data وتفقد ما الذي يتم إعادته

const result = data.map(item => item.value); // هنا قد تواجه مشكلة إذا لم تكن data مصفوفة

console.log(result);

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...