【问题标题】:how to redirect using pure javascript in an express application如何在快速应用程序中使用纯 JavaScript 进行重定向
【发布时间】:2015-12-28 21:46:03
【问题描述】:

我有一个 node.js/express/mysql/angular.js 应用程序,我试图在用户登录后在服务器端重定向用户。这是服务器端控制器,我无法弄清楚如何将用户重定向到另一个页面。我试过 res.render、res.redirect、window.location.href 没有成功。我在 res.render() 中遇到的错误是“没有指定默认引擎,也没有提供扩展名。” window.location.href 表示窗口未定义。 res.redirect() 允许我 console.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"});
                        }
                    }
                });
            });
        }
    };
})();

【问题讨论】:

  • 如果你使用 angular.js,你能解释一下为什么你在后端而不是前端重定向吗?

标签: javascript angularjs node.js redirect express


【解决方案1】:

Express 的文档在这里非常好:http://expressjs.com/api.html#res.redirect

res.redirect('https://stackoverflow.com'); 会将他们重定向到该特定 URL。

res.redirect('/foo'); 将重定向到特定的 URL

res.redirect('back'); 将重定向到引荐来源网址。所以你可以做一个中间件,重定向到/login,然后登录成功完成并返回到原始路径。

【讨论】:

    【解决方案2】:

    没有看到您的路由,我猜测上述控制器上的登录方法对应于 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);
    

    【讨论】:

    猜你喜欢
    • 2012-03-07
    • 2018-01-22
    • 2017-06-19
    • 2015-08-03
    • 2010-12-29
    • 2010-11-08
    • 1970-01-01
    • 2017-08-26
    • 2020-05-25
    相关资源
    最近更新 更多