我不需要使用“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');
});
答案 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