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

لدى خطأ عند اتمام الشراء

Ahmed Malek

السؤال

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

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

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

اريد حل هذه الاخطاء مع الشرح لو سمحتم وفحص لكامل الاخطاء الاخرى وتوضيحها مع الشرح شكرا لكم مقدما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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...