Spark-java重定向 - 浏览器不重定向

时间:2016-01-25 12:26:48

标签: http redirect single-page-application http-redirect spark-java

好的,所以我尝试遵循Spark文档,我想在单页应用程序中执行简单的重定向。我的代码如下所示:

post("/users/login", (req, res) -> {
        ObjectMapper mapper = new ObjectMapper();
        User creation = mapper.readValue(req.body(), User.class);
        User user = userService.getUser(creation.getLogin());
        if (user.getPassword().equals(creation.getPassword())) {
            req.session().attribute("userid", creation.getLogin());
            System.out.println("OK");
            res.status(201);
            res.redirect("/index.html");
            return "";
        }
        System.out.println("BAD");
        return null;
    } , json());

基本上,我有三个静态html文件:registration.html,login.html和index.html。我读了一些关于staticFileLocation的东西,所以我在主函数的开头添加了以下代码行:

staticFileLocation("/public");

当我输入正确的登录名和密码时,我在Chrome的网络视图中找到了我已获得状态为200的GET请求,确定为http://localhost:4567/index.html。但是,浏览器不执行任何操作,也不会将我重定向到该页面。你能告诉我我做错了吗?

编辑: 这是处理客户端登录的javascript代码:

app.controller('LoginUserCtrl', function($scope, $http) {
$scope.loginUser = {};
$scope.submitForm = function() {
    $http({
        method : 'POST',
        url : 'http://localhost:4567/users/login',
        data : $scope.loginUser,
        headers : {
            'Content-Type' : 'application/x-www-form-urlencoded; charset=UTF-8'
        }
    }).success(function() {
        console.log("User logged successfully");
        console.log($scope.loginUser);
    }).error(function() {
        console.log("Unknown error while logging user");
    });

};
});

2 个答案:

答案 0 :(得分:1)

错误的是,您要重定向到应该返回Json数据的后端点中的HTML页面。如果身份验证成功或失败,您必须返回单个json,例如{"auth": "OK"}{"auth": "NOK"},并根据其信息决定从Javascript重定向到何处。

答案 1 :(得分:1)

这是因为res.redirect会向浏览器发送重定向http标头(HTTP状态值301,302,303和307),

但是浏览器只能在get中重定向,而不能在postputdelete中工作(在Chrome中测试过。请注意,浏览器发送了重定向请求,但页面没有改变......)。

请参阅:

http://www.alanflavell.org.uk/www/post-redirect.html