【问题标题】:Delete request only responded with 404 not found删除请求仅响应 404 not found
【发布时间】:2020-12-25 08:36:26
【问题描述】:

我正在使用 node js 构建一个 Rest API,并表示删除请求仅响应 404 not found

get 和 post 请求工作正常,我已连接到数据库

app.delete('deletetodo/:id',(req, res) =>{
    let id = req.params.id
    if(!ObjectID.isValid(id))
        return res.status(404).send()
    Todo.findOneAndDelete(id).then((todo) =>{
        if(!todo)
             return res.status(404).send()
        res.send(todo)
    }, (e) =>{
        res.status(404).send()
    })
})

这个 html 页面总是以 404 响应

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>Error</title>
</head>
<body>
    <pre>Cannot DELETE /deletetodo/5d4a2eb23a43350c60ff7c4d</pre>
</body>
</html>

我在一个单独的文件中测试了那段代码,我认为问题在于删除请求本身

【问题讨论】:

  • 我认为你应该尝试then((err, todo) =&gt;{ 而不仅仅是 todo。
  • 试试app.delete('/deletetodo/:id', ,你在请求​​的开始就错过了'/',这就是它找不到路由的原因
  • Loool 我是个盲人,谢谢你,这几天我一直在敲我的头

标签: node.js express


【解决方案1】:

修复方法是在 deletetodo 路由之前添加一个'/'前缀,如下所示。

之前

app.delete('deletetodo/:id',(req, res) =>{

在路线前面加上斜线之后

app.delete('/deletetodo/:id',(req, res) =>{

如果其他人试图诊断这是否与影响他们的问题相同,如果您为已知路由收到意外的 404 并且从未在我的代码中调用该路由,您就会知道出了问题。

【讨论】:

    【解决方案2】:

    你应该遵守这个声明

    if(!ObjectID.isValid(id))
            return res.status(404).send()
    

    为了确保您也可以尝试删除该语句。

    所以你的代码应该是这样的

    app.delete('deletetodo/:id',(req, res) =>{
        let id = req.params.id
        Todo.findOneAndDelete(id).then((todo) =>{
            if(!todo)
                 return res.status(404).send()
            res.send(todo)
        }, (e) =>{
            res.status(404).send()
        })
    })
    

    【讨论】:

    • 还是一样
    猜你喜欢
    • 2021-01-06
    • 1970-01-01
    • 2015-01-14
    • 1970-01-01
    • 2011-01-24
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    相关资源
    最近更新 更多