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

السؤال

Recommended Posts

  • 0
نشر

بروتوكول الhttp يتضمن إرسال العميل بطلب , والرد عليه من قبل الخادم ومن ثم يتم إغﻻق الإتصال, ﻻ يمكنك إرسال أكثر من رد لنفس الطلب, وهذا هو ما يسبب ذلك الخطأ لديك أنك قمت بمحاولة إرسال أكثر من رد لنفس العميل حيث في السطر

      	res.status(404).send("err")

بعد تنفيذ ذلك السطر أعتقد أنك تظن بأن البرنامج سيقف ولن يتم إرسال ردود أخرى, ولكن ال node ﻻ تعمل بذلك الطريقة فبعد ذلك السطر سيكمل البرنامج تنفيذ باقي الشيفرة حتى يصل هنا

 user.save()
    .then(()=>res.json("user created"))

وهنا يكون ثاني رد يحاول الخادم إرساله لنفس الطلب, ما الحل؟ الحل هو إيقاف الدالة بعد إرسال الرد الأول وذلك عن طريق وضع كلمة return التي بدورها ستقوم بإيقاف الدالة وإرجاع قيمة , كالتالي

if(req.body.user.email==undefined){
      	res.status(404).send("err")
		return
}

بهذا الشكل نضمن عدم إرسال اكثر من رد من الخادم لنفس الطلب

  • 0
نشر

عند معالجتك لطلب على الخادم يجب ارسال رد واحد للعميل، أنت تقوم بتنفيذ أول إرسال (في حال وجود خطأ) ولكن الأسطر اللاحقة يتم تنفيذها

يجب الخروج من الدالة عند أول رد تريد إرساله بإضافة return قبل دالة الارسال send أو json، فتصبح الشيفرة التي أرفقتها كالتالي  

app.post("/user",(req,res)=>{
  if(req.body.user.email == undefined)
    // الخروج من الدالة بعد أول ارسال لرد للعميل
    return res.status(404).send("err")
  
  user=new User(req.body.user)
  user.save()
    .then(()=>res.json("user created"))
})

 

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...