我错过了啥?使用 axios 执行删除请求,使用 mongodb 作为 bakcend 使用 req.params.id 进行故障排除

Posted

技术标签:

【中文标题】我错过了啥?使用 axios 执行删除请求,使用 mongodb 作为 bakcend 使用 req.params.id 进行故障排除【英文标题】:what am i missing ? using axios to perform a delete request , troubleshooting with req.params.id using mongodb as bakcend我错过了什么?使用 axios 执行删除请求,使用 mongodb 作为 bakcend 使用 req.params.id 进行故障排除 【发布时间】:2020-02-14 00:01:37 【问题描述】:

我正在尝试执行一个从本地 mongodb 数据库中删除帖子的函数。 我已经用邮递员测试了它正在工作的代码,但是在前端我使用的是 axios 并且需要将 id 作为请求参数传递, 但我收到一个错误。我的代码无法传递 id 参数,但后端代码看起来没问题。

xhr.js:166 DELETE http://localhost:3000/api/posts/?id=5da802aa8b54d7220f84110e 404(未找到)

axios.delete('/api/posts/',params:id:'xyz')

虽然我通过直接插入 id 在邮递员中进行了测试 (http://localhost:5000/api/posts/xyz_id) 与删除请求,它工作。

/////后端

  delete(req, res, next)
     const postId = req.params.id;
     Post.findOneAndDelete( _id:postId )
    .then(post => res.status(204).send(post))
    .catch(next);
 

//////前端

  const deletePost =()=>
   axios
  .delete('/api/posts/',  params: id:'5da802aa8b54d7220f84110e')
  .then(res => console.log('deleted'))
  .catch('err', err => console.log(err));
  ;

【问题讨论】:

可以贴一下邮递员生成的脚本吗? 【参考方案1】:

验证您不必在标题中提供一些授权:

 const deletePost =()=>
       axios
      .delete('/api/posts/:id',  params: id:'5da802aa8b54d7220f84110e')
      .then(res => console.log('deleted'))
      .catch('err', err => console.log(err));
      ;

【讨论】:

【参考方案2】:

axios 请求的第二个参数通常用于传入一个req.body。在您的后端 逻辑中,您尝试使用req.params 中可用的数据,这些数据应通过前端 上的路由路径传递。试试这个:

const deletePost = () => 
   axios
  .delete(`/api/posts/$5da802aa8b54d7220f84110e`) //you can swap the number with an actual variable
  .then(res => console.log('deleted'))
  .catch('err', err => console.log(err));
  ;

这假设您的 API 路由类似于 app.delete("/api/posts/:id")

【讨论】:

以上是关于我错过了啥?使用 axios 执行删除请求,使用 mongodb 作为 bakcend 使用 req.params.id 进行故障排除的主要内容,如果未能解决你的问题,请参考以下文章

执行 Task.Cancel 方法时引发异常。我错过了啥吗? [复制]

Nginx 位置指令似乎不起作用。我错过了啥吗?

使用 onUpgrade 不起作用,我错过了啥吗?谢谢

使用 AJAX 的 jQuery AutoComplete - 我错过了啥?

Livereload 无法使用 Gulp 在 Chrome 中运行,我错过了啥

阅读 T4 文件的内容我错过了啥?