web-dev-qa-db-fra.com

API Express Router CRUD. Impossible de suprimer

Eh bien, je suis en train de lire le livre MEAN Machine et de suivre ses exemples. J'essaie de comprendre ce qui ne va pas avec mon code afin qu'il ne fasse aucune demande DELETE. GET, PUT et POST fonctionne comme il se doit.

J'ai ce code sur mon 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' });
    });
});

});

J'ai un ensemble d'utilisateurs de la base de données Modulus MongoDB et, lorsque j'essaie d'utiliser POSTMAN avec localhost: 8080/api/users/5610e5576d827dc41fb8e6e, POSTMAN dit

Cannot DELETE /api/users/5610e5576d827dc41fb8e6e 

tandis que mon Node serveur avec Morgan dit

DELETE /api/users/5610e5576d827dc41fb8e6e 404

Pourquoi je reçois un 404? Qu'est-ce que je fais mal?

Code complet

11
Rodmentou

Vous avez placé les crochets de fermeture de put() au mauvais endroit. Vous définissez donc votre routeur delete à l'intérieur du routeur put():

Voici votre code après une indentation appropriée:

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

Donc, il suffit de déplacer le routeur delete en dehors du rappel du routeur put

25
hassansin