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

محمود_سعداوي

الأعضاء
  • المساهمات

    578
  • تاريخ الانضمام

  • تاريخ آخر زيارة

كل منشورات العضو محمود_سعداوي

  1. المشكل في هذا الكود قمت باستبداله بالكود التالي const onInputChange = (e) => { if (e.target.files && e.target.files[0]) { setImage(URL.createObjectURL(e.target.files[0])); setAvatar(e.target.files[0]); } };
  2. السلام عليكم. أواجه مشكل في إرسال وصف الصورة (Post Method) من طرف العميل (react js) إلى الخادم (node mongo express) و ذلك باستعمال multer الكود في طرف الخادم function ShareImageComponent({}) { const [image, setImage] = useState(null); const [imageTitle, setImageTitle] = useState(""); const [imageDescription, setImageDescription] = useState(""); const user = JSON.parse(localStorage.getItem("user")); const onInputChange = (e) => { if (e.target.files && e.target.files[0]) { const file = e.target.files[0]; if (file) { const reader = new FileReader(); reader.onload = (event) => { const imageUrl = event.target.result; setImage(imageUrl); }; reader.readAsDataURL(file); } } }; /** * Post Image */ const postImage = (e) => { e.preventDefault(); const formData = new FormData(); formData.append("title", imageTitle); formData.append("description", imageDescription); if (image) { formData.append('photo', image) } axios .post("/api/images/new_image", formData, { headers: { "Content-Type": "multipart/form-data", "x-auth-token": user.data?.token, }, }) .then((res) => { console.log(res?.data.data) }) .catch((error) => console.log(error.response.data)); }; return ( <div className="share-container"> <div className="share-img"> <img alt="" src={image} /> </div> <form encType="multipart/form-data" className="share-form-container" onSubmit={(e)=>postImage(e)} > <div className="image-upload"> <label onChange={onInputChange} htmlFor="formId"> <input name="photo" type="file" id="formId" accept="image/*" hidden /> click to upload </label> </div> <input type="text" className="share-title" placeholder="Title ..." name="title" value={imageTitle} onChange={(e) => setImageTitle(e.target.value)} /> <textarea type="text" className="share-description" placeholder="Image Description ..." name="description" value={imageDescription} onChange={(e) => setImageDescription(e.target.value)} /> <button className="submit" type="submit"> Share </button> </form> </div> ); } Image Model const ImageSchema = new Schema({ user: { type: mongoose.Schema.Types.ObjectId, ref: "user", }, title: { type: String, required: true }, description: { type: String, required: true }, photo: { type: String, required: true }, likes: [ { user: { type: Schema.Types.ObjectId } } ], comments: [ { user: { type: Schema.Types.ObjectId }, text: { type: String }, date: { type: Date, default: Date.now } } ], date: { type: Date, default: Date.now } }); route const storage = multer.diskStorage({ destination: function (req, file, cb) { cb(null, path.join(__dirname, "../../client/src/assets/images/")); }, filename: function (req, file, cb) { cb(null, new Date().toISOString().replace(/:/g, "-") + file.originalname); }, }); const upload = multer({ storage: storage }); router.post( "/new_image", [ upload.single("photo"), [ check("title", "Please enter a title").not().isEmpty(), check("description", "Please enter a description ").not().isEmpty(), ], protect, ], createImg ); controller const createImg = async (req, res) => { const errors = validationResult(req); if (!errors.isEmpty()) { return res.status(400).json({ errors: errors.array() }); } try { // Create New Image const user = await User.findById(req.user.id); if (!user) { return res.status(404).json({ error: "User not found" }); } // const author = user.name; const newImg = new Image({ title: req.body.title, description: req.body.description, photo: req.file?.filename, user: req.user.id, name: user.name, }); const img = await newImg.save(); res.json(img); } catch (error) { console.log(error); res.status(500).send("Server error"); } }; رسالة الخطأ في طرف العميل (console) Uncaught (in promise) TypeError: Cannot read properties of undefined (reading '0') رسالة الخطأ في طرف الخادم Error: image validation failed: photo: Path `photo` is required. at ValidationError.inspect (C:\Users\saadaoui\Desktop\photaty\server\node_modules\mongoose\lib\error\validation.js:50:26) at formatValue (node:internal/util/inspect:806:19) at inspect (node:internal/util/inspect:365:10) at formatWithOptionsInternal (node:internal/util/inspect:2273:40) at formatWithOptions (node:internal/util/inspect:2135:10) at console.value (node:internal/console/constructor:340:14) at console.log (node:internal/console/constructor:377:61) at createImg (C:\Users\saadaoui\Desktop\photaty\server\controllers\ImgCtr.js:29:13) at process.processTicksAndRejections (node:internal/process/task_queues:95:5) { errors: { photo: ValidatorError: Path `photo` is required. at validate (C:\Users\saadaoui\Desktop\photaty\server\node_modules\mongoose\lib\schematype.js:1364:13) at SchemaType.doValidate (C:\Users\saadaoui\Desktop\photaty\server\node_modules\mongoose\lib\schematype.js:1348:7) at C:\Users\saadaoui\Desktop\photaty\server\node_modules\mongoose\lib\document.js:2958:18 at process.processTicksAndRejections (node:internal/process/task_queues:77:11) { properties: [Object], kind: 'required', path: 'photo', value: undefined, reason: undefined, [Symbol(mongoose:validatorError)]: true } }, _message: 'image validation failed' } شكرا على المساعدة
  3. في طرف الخادم أستعمل multer const storage = multer.diskStorage({ destination: function (req, file, cb) { cb(null, path.join(__dirname, "../../client/src/assets/images/")); }, filename: function (req, file, cb) { cb(null, new Date().toISOString().replace(/:/g, "-") + file.originalname); }, }); const upload = multer({ storage: storage }); router.post( "/new_image", [ upload.single("photo"), [ check("title", "Please enter a title").not().isEmpty(), check("description", "Please enter a description ").not().isEmpty(), ], protect, ], createImg ); ************************************ filename = ""; const createImg = async (req, res) => { const errors = validationResult(req); if (!errors.isEmpty()) { return res.status(400).json({ errors: errors.array() }); } try { // Create New Image const user = await User.findById(req.user.id); if (!user) { return res.status(404).json({ error: "User not found" }); } // const author = user.name; const newImg = new Image({ title: req.body.title, description: req.body.description, category: req.body.category, photo: req.file?.filename, user: req.user.id, name: user.name, }); const img = await newImg.save(); res.json(img); } catch (error) { console.log(error); res.status(500).send("Server error"); } }; مع العلم أني لم أجد أي مشكل مع postman
  4. شكرا. لكن لماذا عندما أقوم بإرسال البيانات يقع إعلامي بأن الحقول فارغة مثلا في المثال الذي قدمته يعلمني بأن لا بد من إدخال حقل imageTitle
  5. في الكود التالي const postImage = (e) => { e.preventDefault(); const formData = new FormData(); formData.append("imageTitle", imageTitle); formData.append("imageDescription", imageDescription); console.log({ formData }) console.log({imageDescription}, {imageTitle}) if (image) { formData.append('image', image) } axios .post("/api/images/new_image", formData, { headers: { "Content-Type": "multipart/form-data", "x-auth-token": user.data?.token, }, }) .then((res) => { console.log(res?.data) }) .catch((error) => console.log(error.response.data.errors[0].msg)); }; تتم طباعة imageDescription و imageTitle بينما formData تظهر فارغة {imageDescription: 'fdgdrhrrrrrrr'} {imageTitle: 'dd'} *********************** formData: FormData[[Prototype]]: FormData[[Prototype]]: Objectconstructor: ƒ Object()hasOwnProperty: ƒ hasOwnProperty()isPrototypeOf: ƒ isPrototypeOf()propertyIsEnumerable: ƒ propertyIsEnumerable()toLocaleString: ƒ toLocaleString()toString: ƒ toString()valueOf: ƒ valueOf()__defineGetter__: ƒ __defineGetter__()__defineSetter__: ƒ __defineSetter__()__lookupGetter__: ƒ __lookupGetter__()__lookupSetter__: ƒ __lookupSetter__()__proto__: (…)get __proto__: ƒ __proto__()set __proto__: ƒ __proto__() شكرا على المساعدة
  6. السلام عليكم. في الكود التالي لا يمكنني التوجه إلى صفحة تسجيل الدخول const user = JSON.parse(localStorage.getItem('user')) || null useEffect(() => { likeImage(); }, [like]); const likeImage = async () => { user ? await axios .put(`/api/images/like/${imageId}`, { headers: { "Content-Type": "application/json", "x-auth-token": user?.data?.token, }, }) .then((res) => { setLike(res?.data); }) .catch((err) => setError(err.response.data.msg)) : navigate('/login') }; ************************* <div className="like" onClick={likeImage}> <i className="fa-regular fa-thumbs-up"></i> 200 </div> تظهر رسالة الخطأ التالية PUT http://localhost:3000/api/images/like/65381befd6729f8158b384a9 401 (Unauthorized) شكرا لكم على المساعدة
  7. السلام عليكم. قمت بالكود التالي قصد إظهار البيانات الخاصة بالمستخدم (الإسم و الصورة) لكل post. // Get All Images const allImages = async (req, res) => { try { let posts = await Image.find() .sort({ date: -1 }) .populate("user", "name avatar id"); res.json(posts); } catch (error) { console.log(error.message); res.status(500).send("Server error"); } }; Image Model const ImageSchema = new Schema({ user: { type: Schema.Types.ObjectId }, title: { type: String, required: true }, description: { type: String, required: true }, photo: { type: Object, default: { url: "", publicId: null, }, }, likes: [ { user: { type: Schema.Types.ObjectId } } ], comments: [ { user: { type: Schema.Types.ObjectId }, text: { type: String }, date: { type: Date, default: Date.now } } ], date: { type: Date, default: Date.now } }); المشكل هو ظهور الid الخاصة بالمستخدم دون ظهور بقية البيانات شكرا على المساعدة
  8. السلام عليكم. هل يمكن إستعمال أدوات لم يقع التطرق إليها في الدورة كredux أو tailwind (للذكر لا للحصر) شكرا
  9. السلام عليكم. أواجه مشكل في إرسال البيانات إلى الخادم الكود const handleSubmit = (e) => { e.preventDefault() axios .post("http://127.0.0.1:8000/api/users/register", formData) .then((res) => console.log(res.data)) .catch((err) => console.log(err)); } package.json "proxy": "http://127.0.0.1:8000" رسالة الخطأ Access to XMLHttpRequest at 'http://127.0.0.1:8000/api/users/register' from origin 'http://localhost:3000' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. AxiosError {message: 'Network Error', name: 'AxiosError', code: 'ERR_NETWORK', config: {…}, request: XMLHttpRequest, …} شكرا على المساعدة
  10. السلام عليكم. قد ننسي أحيانا كلمة المرور لحساب معين بسبب من الأسباب. كذلك الشأن لmongo db atlas. لذلك كيف يمكن تغيير كلمة المرور لقاعدة بيانات محددة. شكرا.
  11. السلام عليكم. أيهما أفضل: إستعمال multer أم express-uploder في مشاريع react node js. شكرا لكم.
  12. السلام عليكم. أريد تغيير لملف الشخصي لمستخدم معين قمت بالكود التالي function EditProfile(props) { const { editProfile, handleEditProfile, user, setCurrentUser } = props const [avatar, setAvatar] = useState("") const [image, setImage] = useState("") const [name, setName] = useState("") const [about, setAbout] = useState("") const [error, setError] = useState("") const fileUpload = useRef(null) const showFileUpload = () => { fileUpload.current.click() } const onImageChange = (event) => { if (event.target.files && event.target.files[0]) { setImage(URL.createObjectURL(event.target.files[0])); setAvatar(event.target.files[0]); } }; const handleSubmit = (e) => { e.preventDefault() const user = JSON.parse(localStorage.getItem("user")); const formData = new FormData() formData.append('name', name) formData.append('about', about) if (avatar) { formData.append('avatar', avatar, avatar.name) } axios .post("/api/auth/profile", formData, { headers: { "Content-Type": "application/json", "x-auth-token": user.data?.token, }, }) .then((res) => { console.log("msg: ", res) // setCurrentUser(res.data.data) }) .catch((error) => setError(error.response.data.msg)); } return ( <div className={editProfile ? "side-profile open" : "side-profile"}> <Row className="heading"> <div className="mr-2 nav-link" onClick={handleEditProfile}> <i className="fa fa-arrow-right" /> </div> <div>الملف الشخصي</div> </Row> <div className="edit_profile d-flex flex-column"> <Form onSubmit={handleSubmit} encType="multipart/form-data" > <Error error={error} /> <div className="text-center" onClick={showFileUpload} > <Avatar src={user?.avatar} file={image} /> </div> <input type="file" className="d-none" accept="image/*" name='image' onChange={onImageChange} ref={fileUpload} // value={image} /> <div className="bg-white px-4 py-2"> <label className="text-muted">الاسم</label> <Input value={name} name="name" onChange={(e)=> setName(e.target.value)} required autoComplete="off" /> </div> <div className="bg-white px-3 py-2"> <label className="text-muted">رسالة الحالة</label> <Input value={about} name="about" onChange={(e)=> setAbout(e.target.value)} required autoComplete="off" /> </div> <div className="bg-white px-3 py-2"> <Button block className="mt-3"> حفظ </Button> </div> </Form> </div> </div> ); } في طرف العميل قمت بالكود التالي const upload = multer({ storage: storage }); router.post('/profile', [upload.single("avatar"), protect], updateProfile) المشكل هو عند إرسال البيانات (handleSubmit) تظهر رسالة الخطأ التالية react-dom.development.js:14887 Uncaught Error: Objects are not valid as a React child (found: object with keys {errors, _message, name, message}). If you meant to render a collection of children, use an array instead. at throwOnInvalidObjectType (react-dom.development.js:14887:1) شكرا على المساعدة
  13. المشكل هنا يجب أن يتحول الكود كالآتي res.status(200).json({ success: true, data: current_user }); أجبت بعد أن وجدت الحل لتعم المنفعة الجميع.
  14. السلام عليكم. أريد تغيير كلمة المرور بالمستخدم الحالي. قمت بالكود التالي في طرف الخادم // Change Password const changePassword = async(req,res) => { const errors = validationResult(req) if (!errors.isEmpty()) { return res.status(400).json({errors: errors.array()}) } try { const { password, newPassword } = req.body; const id = new mongoose.Types.ObjectId(req.user); const current_user = await User.findOne({ _id: id }); // Check if password is wrong then create error. const matchPassword = await bcrypt.compare( password, current_user.password ); if (!matchPassword) { return res.status(401).send({msg: "كلمة المرور خاطئة"}) } // Update password. const salt = await bcrypt.genSalt(10); const hashNewPassword = await bcrypt.hash(newPassword, salt) current_user.password = hashNewPassword; await current_user.save() res.send(res.json({ success: true, data: current_user })) } catch (error) { res.status(500).send({msg: error.message}); } } في طرف العميل const navigate = useNavigate() const [error, setError] = useState('') const [changePassward, setChangePassward] = useState({ password: '', newPassword: '' }) const { password, newPassword } = changePassward const onChange = (e) => { setChangePassward({...changePassward, [e.target.name]: e.target.value}) } const onSubmit = (e) => { e.preventDefault(); const user = JSON.parse(localStorage.getItem("user")); // console.log(user?.data?.token); axios .post("/api/auth/change_password", changePassward, { headers: { "Content-Type": "application/json", "x-auth-token": user?.data?.token, }, }) .then((res) => { setChangePassward(res.data) navigate("/", { replace: true }) }) .catch((err) => setError(err.response.data.message)); }; الوسائط (middleware) const protect = (req, res, next) => { // Get token from header const token = req.header('x-auth-token') // Check if no token if (!token) { return res.status(401).json({msg: 'No token, authorization denied!'}) } // Verify token try { const decoded = jwt.verify(token, process.env.JWT_SECRET) req.user = decoded.user next() } catch (err) { res.status(401).json({msg: 'Token is not valid'}) } } المتصفح يخبرني برسالة الخطأ التالية POST http://localhost:3000/api/auth/change_password 401 (Unauthorized) عند إستخدام postman لم ألاحظ أي مشاكل
  15. السلام عليكم. لإرسال بيانات إلى الخادم قمت بالكود التالي const navigate = useNavigate() const [error, setError] = useState('') const [changePassward, setChangePassward] = useState({ password: '', newPassword: '' }) const { password, newPassword } = changePassward const onChange = (e) => { setChangePassward({...changePassward, [e.target.name]: e.target.value}) } console.log(newPassword) const onSubmit = (e) => { e.preventDefault(); const user = JSON.parse(localStorage.getItem('user')) const headers = new Headers({ 'Content-Type': 'application/json', 'x-auth-token': user?.data?.token }); const requestOptions = { method: 'POST', // or 'POST', 'PUT', 'DELETE', etc. headers: headers }; fetch('/api/auth/change_password', requestOptions) .then(response => response.json()) .then(data => console.log(data)) .catch(error => console.error('Error:', error)); لكن ظهرت لي رسالة خطأ هذا الكود في server const changePassword = async(req,res) => { const errors = validationResult(req) if (!errors.isEmpty()) { return res.status(400).json({errors: errors.array()}) } try { const { password, newPassword } = req.body; const id = new mongoose.Types.ObjectId(req.user); const current_user = await User.findOne({ _id: id }); // Check if password is wrong then create error. const matchPassword = await bcrypt.compare( password, current_user.password ); if (!matchPassword) { return res.status(401).send({msg: "كلمة المرور خاطئة"}) } // Update password. const salt = await bcrypt.genSalt(10); const hashNewPassword = await bcrypt.hash(newPassword, salt) current_user.password = hashNewPassword; await current_user.save() res.send(res.json({ success: true, data: current_user })) } catch (error) { res.status(500).send({msg: error.message}); } } // /api/auth/change_password router.post( "/change_password", [ check("newPassword","required field") .not() .isEmpty(), ], protect, changePassword ); شكرا للمساعدة
  16. سبب الخطأ هو أنه لم يتعرف على const current_user = await User.findOne({_id: id}) فكان الحل كالآتي const changePassword = async(req,res) => { const errors = validationResult(req) if (!errors.isEmpty()) { return res.status(400).json({errors: errors.array()}) } try { const { password, newPassword } = req.body; const id = new mongoose.Types.ObjectId(req.user); const current_user = await User.findOne({ _id: id }); console.log(current_user); res.send(current_user); } catch (error) { res.status(500).send({msg: error.message}); } }
  17. السلام عليكم. أريد تغيير كلمة المرور للمستخدم الحالي. قمت بالكود التالي const changePassword = async(req,res) => { const errors = validationResult(req) if (!errors.isEmpty()) { return res.status(400).json({errors: errors.array()}) } try { const { password, newPassword} = req.body; const current_user = await User.findById( req.user ) console.log(req.body) res.send(current_user) } catch (error) { console.log(error) res.status(500).send("Server Error"); } } هذه واجهة Postman تظهرلي رسالة الخطأ التالية node:internal/errors:491 ErrorCaptureStackTrace(err); ^ Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client at new NodeError (node:internal/errors:400:5) at ServerResponse.setHeader (node:_http_outgoing:663:11) at ServerResponse.header (C:\Users\saadaoui\Desktop\chat-app\server\node_modules\express\lib\response.js:794:10) at ServerResponse.send (C:\Users\saadaoui\Desktop\chat-app\server\node_modules\express\lib\response.js:174:12) at ServerResponse.json (C:\Users\saadaoui\Desktop\chat-app\server\node_modules\express\lib\response.js:278:15) at ServerResponse.send (C:\Users\saadaoui\Desktop\chat-app\server\node_modules\express\lib\response.js:162:21) at changePassword (C:\Users\saadaoui\Desktop\chat-app\server\controllers\authCtr.js:129:9) at process.processTicksAndRejections (node:internal/process/task_queues:95:5) { code: 'ERR_HTTP_HEADERS_SENT' } الرجاء المساعدة في معالجة الخطأ. شكرا
  18. السلام عليكم. عند إنشاء حساب جديد في المثال التالي const onSubmit = async e => { e.preventDefault() axios.post('/api/auth/register', formData) .then(res => { setIsLoggedIn(true) localStorage.setItem("user", JSON.stringify(res.data)); navigate("/", { replace: true }) }) .catch(error => setError(error.response.data.message)) } يقع التنقل نحو صفحة المحادثات بالشكل التالي في هذه الحالة تم حفظ المستخدم الجديد بالذاكرة المحلية للمتصفح و كذلك بقاعدة البيانات، و بالتالي من المفروض أن تكون الصفحة كالآتي قمت بجلب المستخد الحالي و بقية المستخدمين كالآتي useEffect(() => { const getUser = async() => { const user = JSON.parse(localStorage.getItem('user')) await axios.get('/api/auth', { headers: { 'Content-Type': 'application/json', 'x-auth-token': user?.data?.token }}) .then(res => setCurrentUser(res.data)) .catch(err => console.log(err, "err")) } getUser() }, []) ------------------------------------------------ useEffect(()=> { const getUsers = async() => { try { const res = await axios.get(`/api/auth/allusers/${currentUser?._id}`) setUsers(res.data) } catch (error) { console.log(error.message) } } getUsers() },[currentUser?._id]) شكرا على المساعدة
  19. السلام عليكم. أواجه في التنقل بين الصفحات حيث يتوجب علي تحديث الصفحة كلما أردت الحصول على الصفحة المطلوبة function App() { const user = JSON.parse(localStorage.getItem('user')) return ( <Router> <Routes> <Route path='/' element={user ? <Chat/> : <Navigate to='/login'/>} /> <Route path="/login" element={ !user ? <Login/> : <Navigate to='/' />}/> <Route path="/register" element={ !user ? <Register/> : <Navigate to='/login'/> }/> <Route path= "/*" element={ <NotFound/> }/> </Routes> </Router> ); } في هذا المثال مثلا لا يمكن لصفحة تسجيل الدخول بعد النقر على تسجيل الخروج إلا بعد تحديث الصفحة. كذلك بعد تسجيل الدخول لا يمككن التنقل لصفحة المحادثة إلا بعد تحديث الصفحة Login import React, { useState } from 'react' import { Card, Input, Button, Form } from 'reactstrap' import { Link, useNavigate } from 'react-router-dom'; import Error from '../components/Error'; import axios from 'axios' function Login() { const [error, setError] = useState('') const navigate = useNavigate(); const [formData, setFormData] = useState({ name: '', password: '' }) const { name, password } = formData const onChange = (e) => { setFormData({...formData, [e.target.name]: e.target.value}) } const onSubmit = async e => { e.preventDefault() axios.post('/api/auth/login', formData) .then(res => { localStorage.setItem("user", JSON.stringify(res.data)); navigate("/") }) .catch(error => setError(error.response.data.message)) } return ( <Card className="auth col-lg-3 col-sm-6"> <Form onSubmit={onSubmit}> <img src="" alt="" width="200" /> <h5 className="mb-4"> تسجيل الدخول</h5> <Error error={error} /> <Input value={name} name="name" onChange={onChange} placeholder="الاسم" required autoFocus /> <Input type="password" value={password} name="password" onChange={onChange} placeholder="كلمة المرور" required /> <Button color="primary" block className="mb-3"> {" "} تسجيل الدخول{" "} </Button> <small> <Link to="/register">إنشاء حساب جديد</Link> </small> <p className="m-3 text-muted">&copy; {new Date().getFullYear()}</p> </Form> </Card> ); } export default Login Logout import React, {useEffect} from 'react' import { Row, DropdownItem, DropdownMenu, DropdownToggle, Nav, UncontrolledDropdown} from "reactstrap"; import Avatar from '../Avatar'; import { Navigate, useNavigate } from 'react-router-dom'; function ChatHeader({ receiver, users }) { const navigate = useNavigate() // Find Receiver Avatar const receiverAvatar = users.find(u=> u._id === receiver?._id) // logout const logout = () => { navigate('/login') localStorage.clear() } // useEffect(()=>{ // logout() // }, []) return ( <div> <Row className="heading m-0"> <div // onClick={props.toggle} > <Avatar src={receiverAvatar?.avatar} /> </div> <div className="text-right"> <div>{receiver ? receiver.name : ''}</div> {/* <small>{status()}</small> */} </div> <Nav className="mr-auto" navbar> <UncontrolledDropdown> <DropdownToggle tag="a" className="nav-link"> <i className="fa fa-ellipsis-v" /> </DropdownToggle> <DropdownMenu> <DropdownItem >تغيير كلمة المرور</DropdownItem> <DropdownItem divider /> <DropdownItem onClick={()=>logout()}>تسجيل الخروج</DropdownItem> </DropdownMenu> </UncontrolledDropdown> </Nav> </Row> </div> ) } export default ChatHeader شكرا على المساعدة
  20. السلام عليكم. لو سمحتم هل توجد مقالات أو فيديوهات توضح كيف و متى و أين يقع إستعمال http headers. حبذا لو تكون مرفوقة بأمثلة. لغة البرمجة javascript. شكرا لكم.
  21. رسالة الخطأ تظهر مباشرة بعد جلب المستخدمين يعني تظهر أمامي جميع المستخدمين ثم تظهر رسالة الخطأ
×
×
  • أضف...