如何在快速应用程序中使用纯JavaScript重定向

时间:2015-09-30 23:54:27

标签: javascript angularjs node.js redirect express

我有一个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"});
                        }
                    }
                });
            });
        }
    };
})();

2 个答案:

答案 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的中间件,然后登录成功完成并返回原始路径。