防止React Router路由服务器API路径

时间:2016-06-27 20:00:20

标签: javascript react-router sockjs

在服务器上,/api下设置了仅API路径。

在客户端调用此路径时,react-router接管并响应:

browser.js:49 Warning: [react-router] Location "/api/my_request" did not match any routes

我们如何告诉react-router绕过这个并将请求发送到服务器?

更新

这是请求的发送方式:

const sock = new SockJS('http://localhost:3030/api')

sock.onopen = () => {
  console.log('open')
}
sock.onmessage = (e) => {
  console.log('message', e.data)
}
sock.onclose = () => {
  console.log('close')
}

sock.send('test')

2 个答案:

答案 0 :(得分:0)

这是我如何使用React Router 4绕过我的API路由的React Router。

我必须记住React Router在React组件中。我们可以在其中使用JavaScript,并且可以测试URL。

在这种情况下,我检查URL的路径名中的/api/。如果存在,那么我什么也不做,完全跳过React Router。否则,它的路由并非以/api/开头,我让React Router处理它。

这是我的客户端文件夹中的App.js文件:

import React from 'react'
import Home from './components/Home'
import AnotherComponent from './components/AnotherComponent'
import FourOhFour from './components/FourOhFour'
import { BrowserRouter as Router, Route, Switch } from 'react-router-dom'

export default function App() {
   const api_regex = /^\/api\/.*/
   // if using "/api/" in the pathname, don't use React Router
   if (api_regex.test(window.location.pathname)) {
      return <div /> // must return at least an empty div
   } else {
      // use React Router
      return (
         <Router>
            <div className="App">
               <Switch>
                  <Route exact path="/" component={Home} />
                  <Route exact path="/another-link" component={AnotherComponent} />
                  <Route component={FourOhFour} />
               </Switch>
            </div>
         </Router>
      )
   }
}

答案 1 :(得分:0)

嗨,我遇到了同样的问题,这是我的解决方案,这是我的DefaultController作为React应用程序的入口点。

class DefaultController extends AbstractController
{
   /**
   * @Route("/{reactRouting}", name="home", requirements={"reactRouting"="^(?!api).+"}, defaults={"reactRouting": null})
   */
  public function index()
  {
    return $this->render('default/index.html.twig', [
        'controller_name' => 'DefaultController',
    ]);
  }
}

请注意,“要求”为旁路/ api路径定义了正则表达式,并且使用此React路由器将忽略此路由,并且请求将由服务器处理。希望这对您有用。问候!