快速路由器 CRUD API.无法删除 [英] Express Router CRUD API. Cannot DELETE

查看:12
本文介绍了快速路由器 CRUD API.无法删除的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

嗯,我正在阅读 MEAN Machine 这本书并遵循它的示例.我试图弄清楚我的代码有什么问题,所以它不会发出任何 DELETE 请求.GET、PUT 和 POST 可以正常工作.

Well, I'm reading the MEAN Machine book and following it's examples. I'm trying to figure out what's wrong with my code so it won't make any DELETE request. GET, PUT and POST works as should.

我的 server.js 上有这段代码:

I have this code on my 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' });
    });
});

});

我有一组用户 Modulus MongoDB 数据库,当我尝试将 POSTMAN 与 localhost:8080/api/users/5610e5576d827dc41fb8e6e 一起使用时,POSTMAN 说

I have a set of users the Modulus MongoDB database and, when I try to use POSTMAN with localhost:8080/api/users/5610e5576d827dc41fb8e6e, POSTMAN says

Cannot DELETE /api/users/5610e5576d827dc41fb8e6e 

而我与 Morgan 的节点服务器说

while my Node server with Morgan says

DELETE /api/users/5610e5576d827dc41fb8e6e 404

为什么我会收到 404?我做错了什么?

Why I'm getting a 404? What Am I doing wrong?

完整代码

推荐答案

你把 put() 的右括号放在了错误的位置.所以你在 put() 路由器中定义你的 delete 路由器:

You've placed closing brackets of put() in wrong place. So you're defining your delete router inside the put() router:

这是正确缩进后的代码:

This is your code after proper indentation:

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

所以,只需将 delete 路由器移到 put 路由器回调之外

So, just move the delete router outside of put router callback

这篇关于快速路由器 CRUD API.无法删除的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆