【问题标题】:req.query is empty and req.url is not complete using react router and expressreq.query 为空,req.url 使用 react router 和 express 不完整
【发布时间】:2021-02-10 17:21:11
【问题描述】:

当页面 URL 是 http://localhost:3000/verify?token=something 并且我使用 fetch 发出 GET 请求时,当我访问服务器时,req.url 是“/verify”而不是“verify?token” =something",req.query 对象也是空的

客户端在 3000 端口上运行,服务器在 5000 端口上运行。我在客户端的 package.json 中使用代理。

我已经摸不着头脑了一段时间,无法弄清楚这一点,所以任何帮助将不胜感激

客户端代码:

App.js

import {BrowserRouter as Router, Route} from "react-router-dom";


function App() {

  return (
    <Router>
      <Navbar/>
      <Route exact path="/" component={Home}/>
      <UnPrivateRoute path="/verify" component={Verify}/>
    </Router>
  );
}

export default App;

验证.jsx

import AuthService from "../api/auth";

const Verify = () => {
    const [message,setMessage] = useState(null);
    const [confirm,setConfirm] = useState(true);

    if(confirm){
        AuthService.verify().then(data =>{
            const {message} = data;
            setMessage(message);
        });
        setConfirm(false);
    }

    return(
        <div className="container">
            <h1>Verify</h1>
            {message ? <Message message={message}/> : null}
        </div>
    )
}

export default Verify;

auth.js

export default {
    verify: () => {
        return fetch("/user/verify")
            .then(res => res.json())
            .then(data => data);
    }
}

服务器代码:

用户.js

userRouter.get("/verify", (req, res) => {
    console.log(req.url);
    console.log(req.query);
});

【问题讨论】:

  • 您能否分享一下您的 package.json 中的 react-router-dom 版本?
  • 这里是版本 "react-router-dom": "^5.2.0"

标签: javascript reactjs express react-router react-router-dom


【解决方案1】:

发生这种情况是因为对服务器的请求 url 不包含任何查询参数。像这样更改写入 fetch 方法中的 url:

Auth.js

    export default {
       verify: (something) => {   //where something is the value of token
         return fetch('/user/verify?token='+something)
           .then(res => res.json())
           .then(data => data);
     }
    }

还可以像这样传递你调用它的东西的值:

    AuthService.verify(something).then(data =>{
        const {message} = data;
        setMessage(message);
    });

【讨论】:

  • 是的,想通了。由于某种原因,我不认为 URL 不会传递给服务器,因为服务器和客户端在不同的端口/服务器上运行
猜你喜欢
  • 1970-01-01
  • 2017-02-13
  • 2017-07-30
  • 2016-06-18
  • 1970-01-01
  • 2015-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多