2015-10-05 15 views
8

Cóż, czytam książkę MEAN Machine i śledzę jej przykłady. Próbuję dowiedzieć się, co jest nie tak z moim kodem, więc nie będzie żadnych żądań usunięcia. GET, PUT i POST działają tak, jak powinny.Express Router CRUD API. Nie mogę USUNĄĆ

mam ten kod na moich 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' }); 
    }); 
}); 

});

Mam zestaw użytkowników bazy danych Moduł MongoDB, a gdy próbuję użyć listonosz z localhost: 8080/api/Użytkownicy/5610e5576d827dc41fb8e6e, POSTMAN mówi

Cannot DELETE /api/users/5610e5576d827dc41fb8e6e 

podczas gdy mój serwer Węzeł z Morgan mówi

DELETE /api/users/5610e5576d827dc41fb8e6e 404 

Dlaczego otrzymuję 404? Co ja robię źle?

Full code

Odpowiedz

18

pan umieszczone uchwyty Zamknięcie put() w niewłaściwym miejscu. Więc definiowania router delete wewnątrz routera put():

To jest Twój kod po odpowiednim nacięciu:

.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' }); 
     }); 
    }); 
}) 

tak, po prostu przenieść router delete poza put routera zwrotnego

+3

Holly Molly rozwiązałeś mój problem! Od tak dawna walczę z tym problemem, nie wierzę, że to był tylko nawias zamykający! Wielkie dzięki! – Rodmentou

Powiązane problemy