Функция маршрутизатора узла .delete возвращает 404 Not Found?

0

Я изучаю Node/Angular и у меня проблема. Я тестирую с помощью PostMan, чтобы отправлять HTTP-запросы в свой API, и обрабатываю запросы DELETE, подобные этому, в файле маршрутов узлов, называемом api.js

api.js

var User = require('../models/User');
var config = require('../../config');
var jwt = require('jsonwebtoken');
var bodyParser = require('body-parser');

module.exports = function(app, express) {

var apiRouter = express.Router();

apiRouter.use(function(req, res, next) {
    //Validate users access token on each request to our API.

    var token = req.body.token || req.params.token || req.headers['x-access-token'];

    if (token) {
        jwt.verify(token,config.tokenKey, function(err, decoded) {
            if (err) {
                return res.status(403).send({ success: false, message: 'Authorization required.'});
            } else {
                req.decoded = decoded;
                next();
            }
        });
    } else {
        res.status(403).send({ success: false, message: 'No token provided.'});
        next();
    }

});

apiRouter.get('/users/me', function(req, res) {
    return res.send(req.decoded);
});

apiRouter.post('/users/register', function(req, res) {


    var user = new User;
    user.name = req.body.name;
    user.username = req.body.username;
    user.password = req.body.password;

    user.save(function(err) {
        if (err) {
            return res.send(err);
        } else {
            //User saved!
            return res.json({ message: 'User created', id: user.id });
        }

    });

});

apiRouter.get('/users', function(req, res) {
    User.find(function(err, users) {
        return res.send(users);
    });
});

//READ
apiRouter.get('/users/:user_id', function(req, res) {
    User.findById(req.params.user_id, function(err, user) {
        if (err) return res.send(err);
        if (user) return res.send('Welcome ' + user.username);
        if (!user) return res.send('Invalid User');
    });
});

//UPDATE
apiRouter.put('users/:user_id', 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) return res.send(err);
            return res.send('User updated');
        });

    });
});

//DELETE (not working???)
apiRouter.delete('users/:user_id', function(req, res) {

    User.Remove({ id: req.params.user_id }, function(err) {
        if (!err) {
            return res.send('User deleted!');
        } else {
            return res.send('Error deleting user!');
        }
    });

});

return apiRouter;

};

Мои функции apiRouter.get и apiRouter.post работают нормально при передаче в действительном идентификаторе пользователя, но отправка запроса с использованием DELETE не работает и возвращает это в PostMan, когда я тестирую

"Не удается DELETE/api/users/55b0dc599e94910c1d37ffa7"

Также я передаю действительный токен, как того требует мое промежуточное программное обеспечение маршрутов.

Кто-нибудь знает, почему мои запросы DELETE не работают, но другие (например, получение одного пользователя) работают нормально?

  • 0
    Вы капитализируются Remove в User.Remove . Это должно быть в нижнем регистре.
  • 0
    Здравствуйте, я внес изменения и перезапустил мой сервер, возникает та же проблема.
Показать ещё 2 комментария

1 ответ

6
Лучший ответ

Я думаю, вам не хватает параметра: / в маршруте:

apiRouter.delete('/users/:user_id', function(req, res) {

    User.Remove({ id: req.params.user_id }, function(err) {
        if (!err) {
            return res.send('User deleted!');
        } else {
            return res.send('Error deleting user!');
        }
    });

});
  • 0
    Да, это была проблема, спасибо. Кто-то указал на это в комментарии выше около часа назад.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню