节点路由器.delete函数返回404 Not Found

Node Router .delete function returns 404 Not Found?

本文关键字:Not Found 返回 函数 路由器 delete 节点      更新时间:2023-09-26

我正在学习Node/Angular,我遇到了一个问题。我正在测试使用邮差发送HTTP请求到我的API,并在一个名为API .js

的节点路由文件中处理DELETE请求。

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和apirater。post函数在传递有效的用户id时工作良好,但是使用DELETE发送请求不起作用,并且当我测试

时在PostMan中返回此值。

"Cannot DELETE/api/users/55b0dc599e94910c1d37ffa7"

我也在传递一个有效的令牌,这是我的路由中间件所要求的。

有人知道为什么我的DELETE请求不工作,但其他的(如获得单个用户)工作得很好吗?

我想你错过了参数:/在路由:

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

当我们使用express.js服务器时,我们应该在构建URL时小心,每条指令都很重要

误差

:

apiRouter。put(' /users:user_id ', function(req, res) {

<<p> 解决方案/strong>:

apiRouter。put(' /users/:user_id ', function(req, res) {

在我的例子中,错误是在路由的id后面多了一个空格:

错:

app.delete('/api/notes/:id '

:

app.delete('/api/notes/:id'

我花了几个小时在论坛和文档中寻找问题。我发现了一些东西,让我检查了两次路线,它在那里。