【问题标题】:Express JS does not perform deleteExpress JS 不执行删除
【发布时间】:2018-08-25 06:15:44
【问题描述】:

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 /delete 404 7.247 ms - 1202

【问题讨论】:

  • deleteOne 方法应该期待回调。
  • 您确定吗,执行进入了router.post('/delete' 的代码。请在代码中使用 try..catch 语句来找出错误的位置和内容。请提供有助于调试的详细信息。

标签: node.js mongodb express pug


【解决方案1】:

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

话虽如此,如果您想读取路由参数(这是路由处理程序的第一行尝试执行的操作),您的路由定义方式也存在问题。

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

表单本身并没有通过名称(或 id)传递任何 id。您可以通过名为的 url 传递 id:

action= "/delete?id=" + id

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

另外,name 的形式属性 has been deprecated 应替换为 id

然后,重要的是要注意 pug 高度依赖缩进。您粘贴的代码将生成一个空表单和一个单独的输入字段。

这个:

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">

如果您将 pug 模板更改为此(注意输入行上的两个额外空格):

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

您需要在此处添加承诺或回调,否则您的代码将直接关闭连接。

【讨论】:

    猜你喜欢
    • 2019-03-25
    • 2013-08-27
    • 1970-01-01
    • 2021-12-19
    • 2019-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多