javascript - 如何在 Express 应用程序中使用纯 JavaScript 进行重定向

标签 javascript angularjs node.js redirect express

我有一个node.js/express/mysql/angular.js应用程序,我试图在用户登录后在服务器端重定向用户。这是服务器端 Controller ,我不知道如何将用户重定向到另一个页面。我尝试过 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"});
                        }
                    }
                });
            });
        }
    };
})();

最佳答案

没有看到你的路由,我猜测上述 Controller 上的登录方法对应于 POST 路由。例如,

app.post('some/login/route', theAboveController.login)

因此,重定向是在客户端控制的。

因此,进行以下更改:

1) 使用 res.send 将重定向 URL 作为字符串发送到客户端。例如,

res.send('/static/taxonomer'+'.html')

2) 然后在客户端的成功回调中,将位置更改为从 res.send 方法收到的 url。例如,

$http.post('/some/login/route', data).then(function(response) {
    $window.location.href = response;
    }, errorCallback);

关于javascript - 如何在 Express 应用程序中使用纯 JavaScript 进行重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32877403/

相关文章:

Javascript:添加属性方法问题

带有 requirejs 的 angularjs 不起作用

javascript - 使用 PHP 和 AngularJS 加载更多评论

node.js - 使用 NodeJs 上传文件

javascript - Vue 搜索过滤器复选框问题

javascript - 如何在React Router中生成动态路由?

php - 需要建议转换我的应用程序以允许实时更新

json - postman :更具描述性的 tv4 验证错误消息

javascript - uiwebview javascript 没有返回

javascript - 使用 $state.transitionTo 更改状态后重新加载页面失败