2015-10-05 9 views
8

Nun, ich lese das MEAN Machine Buch und folgt seinen Beispielen. Ich versuche herauszufinden, was mit meinem Code nicht stimmt, damit keine DELETE-Anfrage gestellt wird. GET, PUT und POST funktionieren wie es sollte.Express Router CRUD API. Kann nicht löschen

Ich habe diesen Code auf meinem server.js:

app.all('*', function(req, res, next) { 
    res.header('Access-Control-Allow-Origin', '*'); 
    res.header('Access-Control-Allow-Methods', 'PUT, GET, POST, DELETE, OPTIONS'); 
    res.header('Access-Control-Allow-Headers', 'X-Requested-With, content-type, Authorization'); 
    next(); 
}); 

var apiRouter = express.Router(); 

apiRouter.route('/users/:user_id') 
.get(function (req, res) { 
    User.findById(req.params.user_id, function (err, user) { 
     if (err) res.send (err); 
     res.json(user); 
    }); 
}) 

.put(function (req, res) { 
    User.findById(req.params.user_id, function (err, user) { 
     if (err) res.send(err); 

     if (req.body.name) user.name = req.body.name; 
     if (req.body.username) user.username = req.body.username; 
     if (req.body.password) user.password = req.body.password; 

     user.save(function (err){ 
      if (err) send (err); 
      res.json({message: 'User updated'}); 
    }); 
}) 

.delete(function (req, res) { 
    User.remove({ 
     _id: req.params.user_id 
    }, function (err, user) { 
     if (err) return res.send(err); 
     res.json({ message: 'Deleted' }); 
    }); 
}); 

});

Ich habe eine Reihe von Benutzern der Modulus MongoDB-Datenbank und, wenn ich versuche, POSTMAN zu verwenden, mit localhost: 8080/api/users/5610e5576d827dc41fb8e6e, POSTMAN sagt

Cannot DELETE /api/users/5610e5576d827dc41fb8e6e 

während mein Node-Server mit Morgan sagt

DELETE /api/users/5610e5576d827dc41fb8e6e 404 

Warum bekomme ich einen 404? Was mache ich falsch?

Full code

Antwort

18

Sie haben schließende Klammern von put() in der falschen Stelle platziert. Sie sind also die Definition Ihre delete Router innerhalb des put() Router:

Dies ist der Code nach ordnungsgemäßem Einzug:

.put(function (req, res) { 
    User.findById(req.params.user_id, function (err, user) { 
     if (err) res.send(err); 

     if (req.body.name) user.name = req.body.name; 
     if (req.body.username) user.username = req.body.username; 
     if (req.body.password) user.password = req.body.password; 

     user.save(function (err){ 
      if (err) send (err); 
      res.json({message: 'User updated'}); 
     }); 
    }) 

    .delete(function (req, res) {  // <===== defined inside 'put', 
     User.remove({ 
      _id: req.params.user_id 
     }, function (err, user) { 
      if (err) return res.send(err); 
      res.json({ message: 'Deleted' }); 
     }); 
    }); 
}) 

Also, nur bewegen Sie die delete Router außerhalb des put Router Rückrufs

+3

Holly molly, Du hast mein Problem gelöst! Ich habe dieses Problem so lange bekämpft, ich glaube nicht, dass es nur eine schließende Klammer war! Danke vielmals! – Rodmentou

Verwandte Themen