React-Router如何重定向到服务器端口

时间:2019-02-15 02:43:30

标签: reactjs react-router

嗨,我正在使用React Router v4。

我的React在端口3000上运行,而快递服务器在端口8080上运行。下面的代码重定向段将我带到localhost:3000/http://localhost:8080/auth/login

我的React的package.json中已经有"proxy": "localhost:8080"。它不起作用。

如何从localhost:3000重定向到localhost:8080/auth/login

App.js

class App extends Component {
  constructor(props) {
    super(props);
    this.props.fetchProducts();
    this.props.fetchUser();
  }

  render() {
    return (
      <Switch> 
        <Route exact path='/cart' render={() => this.props.isLoggedIn ? 
          <Checkout /> : 
          <Redirect to='http://localhost:8080/auth/login' /> 
        } />
        <Route exact path='/user/account/profile' render={() => <Profile />} />
        <Route exact path='/' render={() => <MainPage />} />
      </Switch>
    );
  }
}

客户的package.json

{
  "name": "client",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    "@material-ui/core": "^3.6.2",
    "prop-types": "^15.6.2",
    "react": "^16.4.1",
    "react-dom": "^16.4.1",
    "react-redux": "^5.0.7",
    "react-router-dom": "^4.3.1",
    "react-scripts": "^2.1.3",
    "redux": "^4.0.0",
    "redux-logger": "^3.0.6",
    "redux-thunk": "^2.3.0"
  },
  "proxy": "http://localhost:8080",
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test --env=jsdom",
    "eject": "react-scripts eject"
  },
  "browserslist": [
    ">0.2%",
    "not dead",
    "not ie <= 11",
    "not op_mini all"
  ]
}

4 个答案:

答案 0 :(得分:0)

尝试将此行添加到客户端文件夹(反应文件所在的位置)的package.json中。

"proxy": {
  "/api/*": {
    "target": "http://localhost:8080"
  }
},

这会将您的请求重定向到快递服务器。另外,将“重定向到重定向”更改为/auth/login,您无需指定完整的url。

答案 1 :(得分:0)

您只需在reactjs的package.json文件中添加代理即可。

  "proxy": "http://localhost:8080"

这将与在端口8080上启动的nodejs服务器连接。

您应该使用url从客户端调用api

axios.post('/api/auth', {credentials}).then(res => res.data.user)

如果您使用express,则同时在使用路由的nodejs中配置路由

这应该有效。

答案 2 :(得分:0)

由于我无法使用react-router的Redirect链接到/auth/login,因此我在方法中更改了window.location.href并返回了null。

class App extends Component {
  constructor(props) {
    super(props);
    this.props.fetchProducts();
    this.props.fetchUser();
  }

  redirect = () => {
    window.location.href = 'http://localhost:8080/auth/login';
    // maybe can add spinner while loading
    return null;
  }

  render() {
    return (
      <Switch> 
        <Route exact path='/cart' render={() => 
          this.props.isLoggedIn ? 
          <Checkout /> : 
          this.redirect()
        } />
        <Route exact path='/user/account/profile' render={() => <Profile />} />
        <Route exact path='/' render={() => <MainPage />} />
      </Switch>
    );
  }
}

答案 3 :(得分:0)

我认为,如果您的快递服务器在端口8080中运行,那么React路由器不会将您重定向到“ http://localhost:8080/auth/login”,因为这是一个可以验证用户名/密码凭据的API。

您可以使用fetch / axios来调用您的登录api。

我认为您正在检查用户是否已经登录,而不是重定向到登录,但是如果用户已经登录,我认为您不需要重定向到登录页面。