【问题标题】:Node Router .delete function returns 404 Not Found?节点路由器 .delete 函数返回 404 Not Found?
【发布时间】:2025-12-29 07:25:11
【问题描述】:

我正在学习 Node/Angular,但遇到了问题。我正在测试使用 PostMan 将 HTTP 请求发送到我的 API,并在名为 api.js 的 Node 路由文件中处理 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 和 apiRouter.post 函数在传入有效的用户 ID 时工作正常,但使用 DELETE 发送请求不起作用,并在我测试时在 PostMan 中返回

“无法删除 /api/users/55b0dc599e94910c1d37ffa7”

我还按照路由中间件的要求传递了一个有效的令牌。

有人知道为什么我的 DELETE 请求不起作用,而其他请求(例如获取单个用户)却正常吗?

【问题讨论】:

  • 您在User.Remove 中大写了Remove。它应该是小写的。
  • 您好,我已经进行了更改并重新启动了我的服务器,出现了同样的问题。
  • 您是否尝试在apiRouter.delete() 的路径中users 之前的开头添加/
  • 感谢 mscdex,确实是缺少前导 /。总是这些小事情被忽视并引起一些头痛。感谢上帝和像你这样的人:D

标签: javascript angularjs node.js


【解决方案1】:

我认为您在路由中缺少参数:/

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

});

【讨论】:

  • 是的,这是问题,谢谢。大约一个小时前,有人在上面的评论中指出了这一点。
【解决方案2】:

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

错误

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

解决方案

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

【讨论】:

    【解决方案3】:

    在我的情况下,错误是路径中 id 后面的额外空格:

    错误:

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

    对:

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

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

    【讨论】: