【问题标题】:Axios + Express.js delete, giving 404 with paramsaxios + Express.js 删除,给 404 带参数
【发布时间】:2020-07-06 09:10:06
【问题描述】:

我期待删除调用

const userDeleteHandler = (id: number) => {
  axios.delete('/admin/deleteUser/', {params: {UserID: id}})
  .then(response => {
         console.log(response);
   })
  .catch(error => {
        console.log(error);
  })
};

可以工作,但遇到一致的 404 错误。经过一番挖掘后,我尝试了

axios.delete('/admin/deleteUser/'+ id)

这很有效。为什么我的params 尝试不起作用?

这是我的server.ts 设置

import adminRoutes from './routes/admin';
const app = express();
app.options('*', cors()) // include before other routes
app.use(cors( {origin: true}));
app.use('/admin', adminRoutes);

以及我routes/admin.ts中的路线

router.get('/users', getAllUsers);
router.post('/newUser', postNewUser);
router.patch('/editUser', editUser);
router.delete('/deleteUser/:UserID', deleteUser);

【问题讨论】:

    标签: reactjs express axios


    【解决方案1】:

    Axios 将参数放置为带有问号 (?) 的查询字符串。因此,通过使用参数,您正在向 /admin/deleteUser/?{id} 发送一个未找到的请求

    【讨论】:

    • 啊哈,所以axios中的params是查询参数,不是路径参数?
    • 是的,对于路径参数,只需将其作为字符串添加到原始 URL 就很容易了
    【解决方案2】:

    因为找不到api => 404

    router.delete('/deleteUser/:UserID', deleteUser); (您将值作为参数获取,但将值作为查询发送。如果您删除 /:UserID 则它将起作用)

    你应该这样称呼

    axios.delete(/admin/deleteUser/${id}) (如果你像上面那样调用API,那么它会起作用,试试这个它肯定会起作用)

    不工作的原因是,你只调用它的端点你应该调用 API with-param(UserId 是参数,不是查询,只要学习如何发送参数值和查询值这会让你明白)

    【讨论】:

      猜你喜欢
      • 2021-12-07
      • 2019-01-21
      • 2017-05-08
      • 1970-01-01
      • 2019-08-25
      • 2021-10-07
      • 1970-01-01
      • 2017-02-02
      • 2021-03-09
      相关资源
      最近更新 更多