Express JS不执行删除

时间:2018-08-25 06:15:45

标签: node.js mongodb express pug

PUGJS脚本

form(id="form1" action="/delete" method="POST")
input(type="submit",name=+item['id'] value="delete")

我的ExpressJS代码

router.post('/delete', function(req, res, next) {
    var id = req.params("i");
    console.log("i am 0")
    MongoClient.connect(url, function(err, db) {
        console.log("i am 1")
        db.collection('books', function(err, book) {
            db.collection.deleteOne( {_id: new mongodb.ObjectID(id)} );
            console.log("i am 2")
            if (err) {
                throw err;
            } else {
                db.close();
                res.redirect('/');
            }
        });
    });
});

尝试执行删除请求,但它甚至不打印(“我是0”) 无法确定代码有什么问题

NPM响应 POST /删除404 7.247毫秒-1202

1 个答案:

答案 0 :(得分:1)

当您看到404时,根本原因肯定是您如何设置路由。如果此代码位于app.js / server.js(或您的根快速表达文件)中,则将成功调用该代码,但是404表示您已将其放置在辅助文件中,并在其中使用其他路径。 / p>

话虽如此,如果您想读取route参数(这是您的路由处理程序的第一行尝试执行的操作),那么在如何定义路由方面也会遇到问题。

router.post('/delete/:i', function...

表单本身没有通过名称(或ID)传递任何ID。您可以通过以下网址传递ID:

action= "/delete?id=" + id

...并使用req.query.id在路由处理程序中读取此内容,或者您​​可以在表单中插入隐藏的输入并使用req.body.id读取它。

此外,表单name属性为has been deprecated,应替换为id

然后,请务必注意,帕格高度依赖于压痕。您粘贴的代码将生成一个空表格和一个单独的输入字段。

此:

form(id="form1" action="/delete" method="POST")
input(type="submit",name=+item['id'] value="delete")

生成此HTML:

<form id="form1" action="/delete" method="POST"></form>
<input type="submit" name="itemId" value="delete">

如果将哈巴狗模板更改为此(请注意输入行上的两个附加空格):

form(id="form1" action="/delete" method="POST")
  input(type="submit",name=+item['id'] value="delete")

您将获得此消息,该消息应能按预期工作:

<form id="form1" action="/delete" method="POST">
  <input type="submit" name="itemId" value="delete">
</form>

然后,您的delete function中存在问题,您缺少回调。

db.collection.deleteOne( {_id: new mongodb.ObjectID(id)} );

您需要在此处添加一个Promise或回调,否则您的代码将直接移动以关闭连接。