如何返回数据库查询并立即重定向?

时间:2014-12-30 18:34:15

标签: angularjs node.js express

我不需要使用“res.redirect()”,我的意思是我想使用任何可行的方法将用户带到不同的页面。

用户输入信息后,会点击一个调用createUser的按钮。 createUser成功向数据库添加新条目。我希望用户也能自动重定向回索引页面(“/”)。我还没有找到任何办法。我下面的内容确实命中了“app.get('/'),但是没有重定向发生。是否可以将重定向放在app.post('/ api / register-new-user')中?我可以使用窗口吗?以某种方式在createUser中的位置?我尝试过这两种方法都无济于事。

// CLIENT =====
$scope.createUser = function() {
    $http.post('/api/register-new-user', $scope.formData)
        .success(function(data) {
            $scope.formData = {}; // clear the form so our user is ready to enter another
            $scope.users = data;
            console.log(data);
//  window.location = "./";
        })
        .error(function(data) {
            console.log('Error: ' + data);
        });
    $http.get('/')
    .success(function(data) {
    })
    .error(function(data) {
    console.log('Error: ' + data);
    });
};

//SERVER========
app.post('/api/register-new-user', function(req, res) {
bcrypt.genSalt(10, function(err, salt) {
if(err)
    res.send(err);
bcrypt.hash(req.body.password, salt, function(err, hash){
    if(err)
    res.send(err);
    User.create({
    username : req.body.username,
    password : hash
    }, function(err, user) {
    if(err)
        res.send(err)
    User.find(function(err, users) {
        if(err)
        res.send(err);
        res.json(users);
    });
    });
});
});

});

app.get('/register', function(req, res) {
    console.log('register');
    res.sendfile('./public/views/register.html');
});

2 个答案:

答案 0 :(得分:0)

好的,所以你正在进行浏览器/服务器交互以通过AJAX创建用户,并且通过AJAX重定向HTTP与浏览器中加载的URL /页面无关。所以你可以忘记服务器端的HTTP重定向。只需发送一个201状态就可以很好地RESTful并在服务器上调用它。

在客户端上,如果POST成功,您只需触发$location.path('/');的新路由即可。只需确保声明$location,以便DI将其注入您的控制器。

另请注意,如果您希望其他控制器可以广泛使用活动用户,则可能需要在$rootScope上设置活动用户。

答案 1 :(得分:0)

你可以尝试

window.location.href()

而不是window.location()。

这应该使用绝对路径。

虽然您正在使用Angular,但可以使用路由提供程序更新视图,而无需重定向用户。

以下是路线提供商的一些文档。 https://docs.angularjs.org/tutorial/step_07