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

السؤال

نشر

قمت بعمل تطبيق حجز مناسبات عند الغاء او اضافة الحجز يعمل التطبيق في poatman وفي الواجهة الامامية حاولت كثيرا ولم اعرف السبب

import React, { useContext, useEffect, useState } from "react";
import {
  IonContent,
  IonHeader,
  IonLoading,
  IonPage,
  IonTitle,
  IonToolbar,
} from "@ionic/react";
import axios from "../config/axios";
import { AuthContext } from "../context/AuthContext";
import { CREATE_EVENT_URL, GET_MYBOOKING_URL } from "../config/urls";
import {
  IonButton,
  IonCard,
  IonCardContent,
  IonCardHeader,
  IonCardSubtitle,
  IonCardTitle,
  IonBreadcrumb,
  IonBreadcrumbs,
  IonIcon,
} from "@ionic/react";
import { arrowForwardCircle } from "ionicons/icons";
import { useParams } from "react-router";

const Booking = () => {
  const [booking, setBooking] = useState([]);
  const [showLoading, setShowLoading] = useState(false);

  const { jwt } = useContext(AuthContext);
  const eventId = useParams();

  useEffect(() => {
    getBooking();
  }, []);

  const onSubmit = async () => {
    try {
      await axios
        .put(CREATE_EVENT_URL + "/" + { eventId }, {
          headers: {
            Authorization: jwt,
          },
        })
        .then((res) => {
          console.log("Event is deleted:", res.data);
        });
    } catch (e) {
      console.log(e);
    }
  };

  const getBooking = async () => {
    setShowLoading(true);

    try {
      await axios
        .get(GET_MYBOOKING_URL, {
          headers: {
            Authorization: jwt,
          },
        })
        .then((res) => {
          setBooking(res.data.getBookings[0].Events);
          setShowLoading(false);
        });
    } catch (e) {
      console.error("Error creating event:", e.response ? e.response.data : e);
      setShowLoading(false);
    }
  };

  return (
    <IonPage>
      <IonBreadcrumbs>
        <IonBreadcrumb href="/events">
          Home
          <IonIcon slot="separator" icon={arrowForwardCircle}></IonIcon>
        </IonBreadcrumb>
        <IonBreadcrumb href="/booking">Booking</IonBreadcrumb>
      </IonBreadcrumbs>
      {showLoading ? (
        <IonLoading isOpen={showLoading} duration={1000} />
      ) : (
        booking && (
          <>
            <IonHeader>
              <IonToolbar color="primary">
                <IonTitle>صفحة حجوزاتي </IonTitle>
              </IonToolbar>
            </IonHeader>
            <IonContent>
              {booking.length > 0 ? (
                booking.map((Events) => {
                  return (
                    <IonCard key={Events.id}>
                      <IonCardHeader>
                        <IonCardTitle>{Events.title}</IonCardTitle>
                        <IonCardSubtitle>{Events.description}</IonCardSubtitle>
                      </IonCardHeader>

                      <IonCardContent>{Events.price}</IonCardContent>

                      <IonButton fill="clear" onClick={() => onSubmit()}>
                        الغاء
                      </IonButton>
                    </IonCard>
                  );
                })
              ) : (
                <IonCardContent>لا يوجد حجوزات</IonCardContent>
              )}
            </IonContent>
          </>
        )
      )}
    </IonPage>
  );
};
export default Booking;

 

Screenshot 2024-07-10 032836.png

Screenshot 2024-07-10 033056.png

Screenshot 2024-07-10 033129.png

Screenshot 2024-07-10 033253.png

Recommended Posts

  • 0
نشر

عند ظهور رسالة الخطأ "Request failed with status code 401"  أو 401 Unauthorized  بجانب رابط الطلب ذلك يشير إلى أنك لم تقم بتسجيل الدخول ولم تتم عملية المصادقة بشكل صحيح أو الjwt  الذي تحتفظ به في الحالة أو تحصل عليه عن طريق useContext

const { jwt } = useContext(AuthContext);

انتهت صلاحيته فلابد من إعادة تسجيل الدخول مرة أخرى.
وفي الواجهة الخلفية أنت قمت بإضافة الدالة isLoggedIn للتأكد أن المستخدم قام بتسجيل الدخول حتى يستطيع الوصول للدالة bookingController.booking وتقوم بإرسال التوكين في ال header في الAuthorization  فى برنامج البوست مان لهذا عند الغاء او اضافة الحجز يعمل التطبيق في البوست مان بدون مشكلة.

يوجد خطأ أخر فى الواجهة الأمامية فى الدالة onSubmit

 const onSubmit = async () => {
    try {
      await axios
        .put(CREATE_EVENT_URL + "/" + { eventId }, {
                                       ^^^^^^^^^^
          headers: {
            Authorization: jwt,
          },
        })
        .then((res) => {
          console.log("Event is deleted:", res.data);
        });
    } catch (e) {
      console.log(e);
    }
  };

يحتوي على خطأ في طريقة بناء الرابط باستخدام الكائن { eventId } . الكود الحالي سيؤدي إلى إنشاء رابط غير صحيح بسبب تضمين الكائن { eventId }  سيتم تحويل الكائن إلى سلسلة نصية غير صحيحة.

http://localhost:4000/event/[Object%20Object]

  في هذه الحالة لا يصل إلى ال event الصحيح في الواجهة الخلفية وحتى يتم كتابة ال eventId بشكل صحيح نقوم بالتعديل والصحيح له يكون كالأتي نقوم بكتابة المتغير مباشرة وليس كائن  

 const onSubmit = async () => {
    try {
      await axios
        .put(CREATE_EVENT_URL + "/" + eventId , {
          headers: {
            Authorization: jwt,
          },
        })
        .then((res) => {
          console.log("Event is deleted:", res.data);
        });
    } catch (e) {
      console.log(e);
    }
  };

أو استخدام ال Template literals `` لإضافة متغير داخل السلسة النصية

 const onSubmit = async () => {
    try {
      await axios
        .put(`${CREATE_EVENT_URL}/${eventId}`, {
          headers: {
            Authorization: jwt,
          },
        })
        .then((res) => {
          console.log("Event is deleted:", res.data);
        });
    } catch (e) {
      console.log(e);
    }
  };

 

  • -2
نشر

الخطأ الذي يظهر عندك "Request failed with status code 401" والذي يعني أن عنوان الURL غير موجود أو قديم أو به خطأ إملائي وبالتالي عليك التأكد أن عنوان ال URL صحيح وتجربة هذا التعديل والمحاوله مره أخري.

const {eventId} = useParams() // عمل desctructuring لقيم ال useParams
//....
  const onSubmit = async () => {
    try {
      await axios
        .put(`${CREATE_EVENT_URL}/${eventId}`, { // إستخدام ال Template literals
          headers: {
            Authorization: jwt,
          },
        })


بالتوفيق

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...