我有一个简单的反应应用程序,反应路由器设置如下。它位于我应用的根目录(/
)
import React, {Component} from 'react';
import { render } from 'react-dom'
import { Router, Route, hashHistory, IndexRoute } from 'react-router'
import Main from "./components/main";
import Index from "./components/polls/index";
import New from "./components/polls/new";
import Show from "./components/polls/show";
import PollAdmin from "./components/polls/poll_admin"
render((
<Router history={hashHistory}>
<Route path="/" component={Main}>
<IndexRoute component={Index}/>
// more components here, removed for brevity
</Route>
</Router>
), document.getElementById('app'))
当用户登录(不是路由器的一部分)时,会将其重定向回/
。
一旦他们这样做,Index
组件响应(见下文)。
浏览器然后访问/api/polls
,这不是预期的。
/api/polls
是获取要显示的数据的API终点。
我通过删除componentDidMount
函数来确认这一点。随着该功能的消失,浏览器不会访问/ api / polls
为什么浏览器访问/api/polls
而不是发出异步请求?如何正确地重定向回/
?
import React, {Component} from 'react';
import { Link } from 'react-router';
import axios from 'axios';
class Index extends React.Component {
constructor(props){
super(props);
this.state = {
polls: []
}
}
componentDidMount() {
var _this = this;
axios('/api/polls')
.then(function(result){
_this.setState({
polls: result.data.polls
})
})
.catch(function(err){
})
}
...
}
}
export default Index;
答案 0 :(得分:0)
经过多一点探讨我解决了这个问题。首次访问/
时,组件Index
会向/api/polls
发出异步请求。然后用户通过Twitter登录。以下是相关路线:
router.get('/auth/twitter', passport.authenticate('twitter'));
router.get('/auth/twitter/callback', passport.authenticate('twitter', { failureRedirect: '/login' }), function(req, res) {
res.redirect(req.session.returnTo || '/');
});
问题在于req.session.returnTo
将/api/polls
存储为最后一个“访问过的”网址。登录浏览器后重定向到/api/polls
在页面上呈现一些丑陋的json。就我的目的而言,这是一个简单的解决方案。我刚刚将路线改为:
router.get('/auth/linkedin/callback', passport.authenticate('linkedin', { failureRedirect: '/login' }), function(req, res) {
res.redirect('/');
});
用户总是被重定向回/
,这正是我想要的。如果您想重定向回用户的最后一页,我不确定该怎么办。