मैं अपने admin.ejs पेज के माध्यम से अपने नेवला डेटाबेस में कर्मचारियों को हटाने की कोशिश कर रहा हूँ।

अब तक मैंने सामान्य POST अनुरोध के साथ और विधि-ओवरराइड का उपयोग करके DELETE के साथ करने का प्रयास किया है लेकिन न ही काम किया है।

// विधि-ओवरराइड के बिना प्रयास करें

// स्कीमा //

const empSchema = {
name: String,
number: String
  };

  const Employee = mongoose.model("Employee", empSchema);

//admin.ejs//

 <form action="/deleteEmp" method="POST" >
  <div>
    <label>Name</label>
    <input type="text" name="name">
  </div>
  <button class="btn btn-primary" type="submit">Delete Employee</button>
</form>

//app.js//

app.post("/deleteEmp", function(req, res) {
Employee.findOneAndDelete({name: req.params.name}, function(err, result) {

if(!err) {
    console.log('User Deleted');
    res.redirect("admin");
} else {
    console.log(err);
}
});

});

// मेथड-ओवरराइड के साथ प्रयास करें //

//admin.ejs//

   <form method="POST" action="/deleteEmp?_method=DELETE">
  <div>
    <label>ID</label>
    <input type="text" name="id">
  </div>
  <button class="btn btn-primary" type="submit">Delete Employee</button>
   </form>

//app.js//

  app.delete("/deleteEmp", function(req, res) {
  Employee.findOneAndDelete({name: req.params.name}, function(err, result) 
  {

   if(!err) {
    console.log('User Deleted');
    res.redirect("admin");
   } else {
    console.log(err);
  }
  });

  });

विधि ओवरराइड के बिना मेरे प्रयास में यह DELETE के बजाय POST विधि पर सेट होने पर चलेगा, लेकिन कर्मचारी को हटाया नहीं गया है। यदि विधि को DELETE पर सेट किया जाता है, तो यह GET /deleteEMP . नहीं लौटा सकता है

मुझे विधि-ओवरराइड के साथ कोई सफलता नहीं मिली, इसलिए मुझे आश्चर्य है कि क्या मुझे कुछ याद आ रहा है?

0
codenoob9000 4 नवम्बर 2019, 23:31

2 जवाब

सबसे बढ़िया उत्तर

यद्यपि आप POST अनुरोध के माध्यम से एक डिलीट ऑपरेशन कर सकते हैं, प्रत्येक मामले के लिए उचित http VERB (GET, POST, PUT, DELETE ..) का उपयोग करने की अनुशंसा की जाती है। तो आपके मामले में मैं दस्तावेज़ को हटाने के लिए AJAX हटाने के अनुरोध का उपयोग करूंगा।
वैसे, आपका पहला विकल्प (action="/deleteEmp" method="POST") काम नहीं करने का कारण आपके कंट्रोलर की गलती है। name: req.params.name के बजाय name: req.body.name का प्रयोग करें। आपके द्वारा भेजा गया डेटा आपके अनुरोध ऑब्जेक्ट के body में है।

0
dimitris tseggenes 5 नवम्बर 2019, 00:37
यह req.params था, एक बार जब मैंने इसे req.body पर स्विच किया तो विधि-ओवरराइड ने ठीक काम किया। शुक्रिया!
 – 
codenoob9000
5 नवम्बर 2019, 01:04

"प्राप्त / हटा नहीं सकता" इंगित करता है कि आपने जीईटी अनुरोध भेजा है। डाकिया या XMLHttpRequest(Ajax) से DELETE अनुरोध भेजने का प्रयास करें। HTML फॉर्म केवल HTTP अनुरोध विधियों के रूप में GET और POST का समर्थन करते हैं।

0
majkel 4 नवम्बर 2019, 23:59