【问题标题】:Node.js/ Express DELETE method not workingNode.js/ Express DELETE 方法不起作用
【发布时间】:2017-06-02 15:27:21
【问题描述】:

我正在尝试删除表单的数据。 GET 和 PUT 方法有效,但 DELETE 无效。我的目标是使用 JS 函数更改表单 POST 方法,然后使用删除按钮调用它,这样我就可以擦除数据。但它不起作用。 HTML:

<form id="protest_form" action="scout_post" method="POST">

            <input type="text" id="scoutName" name="scoutName" placeholder="name"> <br>
            <input type="text" id="scoutSurname" name="scoutSurname" placeholder="surname"> <br>
            <input type="text" id="scoutPassword" name="scoutPassword" placeholder="password"> <br>

            <button type="submit" id="button" class="btn btn-primary">Submit</button>
            <button type="button" id="button" class="btn btn-danger" onclick="deleteForm()">Delete</button>
        </form>

JS函数:

function deleteForm() {

        document.getElementById('protest_form').setAttribute("method", "delete");
        document.getElementById('protest_form').submit();

    }

还有节点路由:

app.post('/scout_post', urlencodedParser,function (req,res){

    var name= req.body.scoutName,
        surname=req.body.scoutSurname,
        password=req.body.scoutPassword;


            db.collection('scoutPost').insertOne(
                { 'name': name, 'surname': surname,'password':password},
                function (err, r) {
                    assert.equal(null, err);
                    res.send("Document inserted with _id: " + r.insertedId);
                }
            );  
})

app.delete('/scout_post', urlencodedParser,function (req,res){

        var name= req.body.scoutName,
            surname=req.body.scoutSurname,
            password=req.body.scoutPassword;


                db.collection('scoutPost').remove(
                    { 'name': name, 'surname': surname,'password':password},
                    function (err, r) {
                        assert.equal(null, err);
                        res.send("Document deleted");

                    });

    }) 

当我单击调用 deleteForm() 函数的按钮时,我收到此错误:

Cannot GET /scout_post?scoutName=&scoutSurname=&scoutPassword=

如果我将 HTML 和 Node 路由更改为 GET 方法,我会插入文档,单击 DEL 按钮时不会被删除...如何解决这个问题?谢谢

【问题讨论】:

    标签: javascript node.js


    【解决方案1】:

    HTML 表单中只允许使用 GET 和 POST。如果您想提交 DELETE 请求,您必须通过 XHR 客户端在服务器端使用 a method override middleware 并在客户端进行适当的更改。

    【讨论】:

    • 好的,谢谢,为什么要投反对票?我问如何解决这个问题,这是一个问题,对吧?
    • 好的,但是即使是ponury的答案的否决票也不公平,有时我真的不明白这些决定......
    【解决方案2】:

    正如MDN 上的文档所说,表单方法属性上只有“POST”和“GET”方法可用。您需要使用 AJAX 来完成此操作

    【讨论】:

      猜你喜欢
      • 2014-05-16
      • 2017-07-17
      • 1970-01-01
      • 2014-07-01
      • 2015-02-08
      • 2012-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多