我有一个node.js应用程序,在登录时重定向到http://localhost:8080/。这是使用expressJS完成的,如下所示:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="initial-scale=1,maximum-scale=1,user-scalable=no">
<title>Add the Compass widget to a basic 2D map - 4.0</title>
<style>
html,
body,
#viewDiv {
padding: 0;
margin: 0;
height: 100%;
width: 100%;
}
</style>
<link rel="stylesheet" href="https://js.arcgis.com/4.0/esri/css/main.css">
<script src="https://js.arcgis.com/4.0/"></script>
<script>
require([
"esri/Map",
"esri/views/MapView",
"esri/widgets/Compass",
"dojo/domReady!"
],
function(
Map,
MapView,
Compass
) {
var map = new Map({
basemap: "national-geographic"
});
var view = new MapView({
container: "viewDiv",
scale: 500000,
center: [26.26, 39.17],
map: map
});
/********************************
* Create a compass widget object.
*********************************/
var compassWidget = new Compass({
view: view
});
// Add the Compass widget to the top left corner of the view
view.ui.add(compassWidget, "top-left");
});
</script>
</head>
<body>
<!-- add div for test-->
<div style="height:500px;"></div>
<div id="viewDiv"></div>
</body>
</html>
Chrome中的开发者工具显示它正在按预期重定向,因为它执行以下操作:
res.redirect('http://localhost:8080/');
在localhost:8080上有一个react应用程序,它使用react-router来处理路由。其配置如下所示:
Request URL: http://localhost:8080/
Request Method: GET
Status Code: 304 Not Modified
Remote Address: 127.0.0.1:8080
但由于某种原因,应用程序被重定向到const routes = <Route component={AppContainer}>
<Route path="/" component={DashboardContainer} />
<Route path="settings" component={SettingsContainer}>
<Route path="projects" component={ProjectsContainer}>
<Route path="new" component={NewProject} />
</Route>
<Route path="views" component={ViewsContainer}>
<Route path="new" component={NewView} />
<Route path=":id" component={EditView} />
</Route>
<Route path="themes" component={Themes} />
</Route>
</Route>;
,这会http://localhost:8080/#/_=_?_k=1yp57h
但是,如果我直接在浏览器中加载http://localhost:8080/或http://localhost:8080(跳过重定向部分),则会加载http://localhost:8080/#/?_k=y8p8c9并且应用程序正常运行。
知道发生了什么事吗?
答案 0 :(得分:1)
解决! node.js上的身份验证过程与Facebook集成在一起。事实证明,在Facebook的回调URL中,它在URL的末尾返回了一个# = ,当我运行res.redirect('http://localhost:8080/');
时,它保留了哈希值(没想到)这就是浏览器的工作原理)并重定向到http://localhost:8080/#_=_
要解决这个问题我只是强迫哈希什么都没有:
res.redirect('http://localhost:8080/#');