Express js - 无法重定向

时间:2011-11-23 10:15:40

标签: node.js express

我正在尝试执行以下操作:

来自客户

var req =  jQuery.post(
  "http://www.example.com:3000"+"/dologin", 
  {"username" : username, "password" : password}).error(function(){
    alert("an error occurred");
  });
快递根

app.post('/dologin',function(req, res) {
  res.redirect('http://bbc.co.uk');
});

结果传回

<p>Moved Temporarily. Redirecting to <a href="http://bbc.co.uk">http://bbc.co.uk</a></p>

似乎如果我从jquery发帖,重定向将无效。有没有人知道强迫它重定向的方法?

4 个答案:

答案 0 :(得分:19)

浏览器不会在ajax响应的重定向上重定向窗口。使用javascript重定向浏览器。

例如,在服务器中将新网站作为内容发送。

res.contentType('application/json');
var data = JSON.stringify('http://site.example.com/')
res.header('Content-Length', data.length);
res.end(data);

在客户端

var req =  jQuery.post(
   "http://www.mysite.com:3000"+"/dologin", 
    {"username" : username, "password" : password}, 'json').error(function(){
       alert("an error occurred");
    }).success(function(data) {
       window.location = data;
    });

答案 1 :(得分:15)

我在开发应用时遇到了同样的问题。如果方法发布,Express似乎不会重定向。

尝试:

app.post('/dologin',function(req, res) {
  req.method = 'get'; 
  res.redirect('http://bbc.co.uk'); 
});

答案 2 :(得分:0)

使用OAuth2时,我正在做这样的事情。我有一个指向我的某个网页的链接,而这又会重定向到谷歌。

要重定向到其他位置,以下代码执行实际重定向

app.get('/GoogleRequestAuthorization.html',function(req,res) {
.
.
.
.

res.writeHead(302, {location: url});
res.end();

});

url是您要重定向到的地址。

完整功能是......

答案 3 :(得分:0)

我遇到了类似的问题,并通过检查请求的类型来解决它。在我的情况下,我使用JSON,但它也适用于其他POST请求:

                var ajax = req.xhr;
                if(ajax) {
                    res.status(401).json({'msg':'redirect','location':'/login'});
                }
                else {
                    req.method = 'get';
                    res.status(401).redirect('/login');
                    //Or if you prefer plain text
                    //res.status(333).send("Redirect");
                }

它处理Ajax POST和AJAX以及标准GET请求。 在客户端上,在Ajax中驻留回调:

$.ajax({
        type: 'POST',
        data: Msg,
        url: '/some/post',
        dataType: 'JSON'
    }).success(function(data, textStatus, req ) {
        if(data.msg==="redirect") window.location = data.location;
        else {...}
    }).error(function(data, textStatus, req) {
         if(req=="Unauthorized") {
            alert("Unauthorized!");
            window.location = "/login";
        } else if (data.responseJSON.msg==="redirect") window.location = data.responseJSON.location;
        else {
           //...
        }
    });

实际上你可以在这里处理更多的状态,除了302之外,它会自动跟随JQuery,你从你想要重定向到的页面得到200作为响应。所以我避免发送302,在我的情况下发送401,或任何其他状态,例如333,这将被视为错误。