2015-10-05 9 views
8

まあ、私はMEAN Machineの本を読んでいて、それを例にしています。私は自分のコードに何が間違っているのかを調べようとしているので、DELETE要求は出ません。 GET、PUT、POSTは必要に応じて動作します。 )Express Router CRUD API。 Can not DELETE

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

};:

私はserver.js上でこのコードを持っています

私はローカルホストでPOSTMANを使用しようとすると、私は、モジュラスのMongoDBデータベースユーザーのセットを持って:8080/API /ユーザー/ 5610e5576d827dc41fb8e6eをモルガンと私のノードサーバが

言いながら、POSTMANは

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

だから、ちょうどputルータのコールバック

+3

ホリーモリーの外deleteルータを移動し、あなたは私の問題を解決しました!私はこの問題を長年にわたって闘ってきました。私はそれが閉幕ではないと信じています!どうもありがとう! – Rodmentou