nodejs مساعدة


أعتقد أن المشكلة التي تواجهها تبدو وكأنها تتعلق بكيفية تعيين المسار إلى صورة الزائر الافتراضية، حيث أنه في الكود الخاص بك تقوم بتعيين مسار الصورة الافتراضية باستخدام socket.handshake.headers.host، وهو ما قد يكون السبب في حذف الصورة الافتراضية إذا كانت المسارات غير صحيحة أو مكررة.

تأكد من أن المسار الذي تقوم بتعيينه للصورة الافتراضية صحيح ويشير إلى الصورة الافتراضية الفعلية، يمكنك اختبار المسار بفتح الصورة مباشرة في المتصفح.

و أرى أنه بدلا من استخدام socket.handshake.headers.host، جرب تعيين المسار بصورة ثابتة للصورة الافتراضية بالشكل التالي:

const defaultPicPath = "/site/pic.png"; // مسار ثابت للصورة الافتراضية


const wert = OnlineUser.findIndex(lilianna => lilianna.id == data.data.id);
if (wert != -1) {
  UserInfo[data.data.id].pic = defaultPicPath;
  OnlineUser[wert].pic = defaultPicPath;
  io.emit("SEND_EVENT_EMIT_SERVER", {
    cmd: "u^",
    data: OnlineUser[wert]
  });
  if (UserInfo[data.data.id].uid) {
    UsersRepo.updateBy({
      state: "updatePic",
      uid: UserInfo[data.data.id].uid,
      pic: defaultPicPath
    });
  }
}

نعم مسار الصورة صحيح

ولكن لا يمكنني الغاء socket.handshake.headers.host، بسبب أن الموقع مدمج مع أكثر من رابط ولكل رابط صورة إفتراضية خاصة به

قبل تعيين الصورة الافتراضية، تأكد من وجود الملف في المسار المحدد، يمكنك استخدام مكتبة fs للتحقق من وجود الملف:

const fs = require('fs');
const path = require('path');


const wert = OnlineUser.findIndex(lilianna => lilianna.id == data.data.id);
if (wert != -1) {
  const defaultPicPath = `/site/${socket.handshake.headers.host}/pic.png`;
  
  fs.access(path.join(__dirname, defaultPicPath), fs.constants.F_OK, (err) => {
    if (err) {
      console.error(`Default pic not found: ${defaultPicPath}`);
    } else {
      UserInfo[data.data.id].pic = defaultPicPath;
      OnlineUser[wert].pic = defaultPicPath;
      io.emit("SEND_EVENT_EMIT_SERVER", {
        cmd: "u^",
        data: OnlineUser[wert]
      });
      if (UserInfo[data.data.id].uid) {
        UsersRepo.updateBy({
          state: "updatePic",
          uid: UserInfo[data.data.id].uid,
          pic: defaultPicPath
        });
      }
    }
  });
}

قمت بتجربة الكود قبل قليل وللأسف لم تنجح ، يعطي خطأ

Default pic not found ، ولا يتم حذف الصورة


تطوير الويب

مجتمع لمناقشة وتبادل الخبرات حول تطوير الويب. ناقش أحدث التقنيات، اللغات، والأدوات في عالم تطوير المواقع والتطبيقات. شارك مشاريعك، اسأل عن نصائح، وتعاون مع مطورين محترفين وهواة.

91 ألف متابع