我有一个node.js / express / mysql / angular.js应用程序,我试图在服务器端登录后重定向用户。这是服务器端控制器,我无法弄清楚如何将用户重定向到另一个页面。我已经尝试过res.render,res.redirect,window.location.href但没有成功。我在res.render()中遇到的错误是“没有指定默认引擎,也没有提供扩展名。”#39; window.location.href表示窗口未定义。 res.redirect()允许我控制.log.log我想要指向的页面的html。非常感谢任何帮助,谢谢!
var Query = require('./../models/query.js');
module.exports = (function(){
return {
show: function(req,res) {
req.getConnection(function(err,connection){
connection.query('SELECT * FROM users',function(err,rows){
res.json(rows);
});
});
},
add: function(req,res){
var newUser = {
first_name: req.body.first_name,
last_name: req.body.last_name,
email: req.body.email,
password: req.body.password,
created_at: req.body.created_at
};
var table = "users";
Query.insert(req,newUser,table,function(err,results){
if(err) return res.json(err);
Query.find(req,table,function(err,results){
if(err) return res.json(err);
res.json(results);
});
});
},
login: function(req,res) {
var input = req.body;
console.log("got here", input);
req.getConnection(function(req, connection) {
// console.log("got connections",connection);
connection.query('SELECT * FROM users WHERE email = ?',input.email, function(err, rows) {
if (err) {
console.log("User doesn't exist: %s", err);
res.redirect('/', { data:"failed"});
} else {
if (input.password == rows[0].password) {
console.log("User password is matched");
*** success redirect right here ****
res.redirect('/static/taxonomer'+'.html');
} else {
console.log("failed here", rows[0].password);
res.redirect( '/', { data:"failed"});
}
}
});
});
}
};
})();
答案 0 :(得分:3)
在没有看到您的路线的情况下,我猜测上述控制器上的登录方法对应于POST路由。例如,
app.post('some/login/route', theAboveController.login)
因此,重定向在客户端控制。
所以,然后进行以下更改:
1)使用res.send
将重定向网址作为字符串发送给客户端。例如,
res.send('/static/taxonomer'+'.html')
2)然后在成功回调的客户端,将位置更改为您从res.send方法收到的URL。例如,
$http.post('/some/login/route', data).then(function(response) {
$window.location.href = response;
}, errorCallback);
答案 1 :(得分:1)
Express的文档在这里非常好:http://expressjs.com/api.html#res.redirect
res.redirect('https://stackoverflow.com');
会将其重定向到该特定网址。
res.redirect('/foo');
将重定向到特定网址
res.redirect('back');
会重定向到引荐来源。因此,您可以执行类似重定向到/login
的中间件,然后登录成功完成并返回原始路径。