2015-10-05 22 views
8

嗯,我正在閱讀MEAN機器書,並遵循它的例子。我想弄清楚我的代碼有什麼問題,所以它不會發出任何DELETE請求。 GET,PUT和POST按原樣工作。快速路由器CRUD API。不能刪除

我有我的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' }); 
    }); 
}); 

});

我有一組用戶的模量的MongoDB數據庫,當我嘗試使用郵差與本地主機:8080/API /用戶/ 5610e5576d827dc41fb8e6e,郵差說

Cannot DELETE /api/users/5610e5576d827dc41fb8e6e 

,而我與摩根節點服務器說

DELETE /api/users/5610e5576d827dc41fb8e6e 404 

爲什麼我要404?我究竟做錯了什麼?

Full code

回答

18

你在錯誤的地方放置put()右括號。所以你定義put()路由器內部的delete路由器:

這是正確的縮進後,代碼:

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

所以,只要將delete路由器put路由器回調

+3

霍利莫莉之外,你解決了我的問題!我長期以來一直在解決這個問題,我不認爲這只是一個結束語!非常感謝! – Rodmentou