React Router Dom 命中错误的端点

Posted

技术标签:

【中文标题】React Router Dom 命中错误的端点【英文标题】:React Router Dom hitting wrong endpoint 【发布时间】:2021-08-20 04:57:42 【问题描述】:

我有一个 redux 操作,每当网站上的用户尝试更改他们的个人资料时就会触发该操作。它是通过我使用 Mosh 的教程编写的 api 调用中间件来实现的。

export const updateUserProfile =
  ( id, name, email, favouriteThing, password, confirmPassword , headers) =>
  (dispatch) => 
    dispatch(
      apiCallBegan(
        url: `api/users/profile`,
        data:  id, name, email, favouriteThing, password, confirmPassword ,
        headers,
        method: 'put',
        onStart: userUpdateRequested.type,
        onSuccess: userUpdateReceived.type,
        onError: userUpdateFailed.type,
      )
    );
  ;

应用路由是这样的:

          <Route path='/profile' render=ProfileScreen exact />
          <Route path='/profile/page/:pageNumber' render=ProfileScreen exact/>

我在个人资料页面路由上有页面,因为我有一个 React 组件,它显示用户在表中创建的所有项目,并且我需要该表来处理多个页面。我不知道如何在不更改整个页面的情况下更改页面中的单个组件,所以我让它整个页面都更改。

端点是这样的:

router
  .route('/profile')
  .put(protect, updateUserProfile);

我使用如下所示的提交处理程序提交新数据:

  const submitHandler = (e) => 
    e.preventDefault();
    if (password !== confirmPassword) 
      setMessage('Passwords do not match');
     else 
      dispatch(updateUserProfile(data, headers));
    
  ;

当我在这个 URL 时,这一切都很好:http://localhost:3000/profile

当我转到配置文件的第 2 页时,这是 URL:http://localhost:3000/profile/page/2,我收到以下错误:

404 Not Found试图访问/profile/page/api/users/profile

我在触发 submitHandler 时记录了 location.pathname 并且我得到了看起来正确的“/profile”。 但是,当我在快速错误中间件中记录 req.originalURL 时,我得到 /profile/page/api/users/profile

因此,在前端调用函数和后端接收函数之间的原始 URL 发生了变化。

无论我在个人资料的哪个页面上,是否都将 req.originalURL 保留在“/profile”?我曾尝试在 React Router Dom 中使用 Switch 组件并将配置文件页面路由的位置设置为“/profile”,但这会破坏配置文件页面路由,并且当您单击下一页时,配置文件页面根本不会加载。

我在应用程序中进行了很多谷歌搜索和测试,但我似乎什么都想不出来,这让我觉得我对这里发生的事情有一个根本的误解。如果有人有任何想法,我将非常感谢您的帮助。

【问题讨论】:

【参考方案1】:

事实证明,这是一个非常简单的修复,有人在另一个网站上向我指出。我想我会在这里分享它。

请求中的url开头需要有一个正斜杠,否则解释为相对路径。

url: `/api/users/profile`

【讨论】:

以上是关于React Router Dom 命中错误的端点的主要内容,如果未能解决你的问题,请参考以下文章

react-router 和 typescript 抛出“无法解析 'react-router-dom'”错误

尝试导入错误:“Switch”未从“react-router-dom”导出

尝试导入错误:“useRouteMatch”未从“react-router-dom”导出

./src/App.js 尝试导入错误:“Switch”未从“react-router-dom”导出

反应:'重定向'不是从'react-router-dom'导出的

× React - fetch('/') 不会命中 Express.router 中的索引路由