أعتقد أن المشكلة التي تواجهها تبدو وكأنها تتعلق بكيفية تعيين المسار إلى صورة الزائر الافتراضية، حيث أنه في الكود الخاص بك تقوم بتعيين مسار الصورة الافتراضية باستخدام 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
});
}
}
});
}
التعليقات