试图让Jade重定向页面

时间:2016-01-27 03:51:28

标签: javascript node.js pug

FB.setAccessToken(req.body.accessToken);
FB.api('/me', function(response) {
        Promise.try(function() {
                return routes.getUser(response);
        }).then(function(newResponse) { 
                res.render('groups', newResponse);
        }).catch(function(e) {
                console.error(e);
        });
});

客户端:

function checkToken(response){
    $.post('/auth', {
            id: response.authResponse.userID,
            accessToken: response.authResponse.accessToken
    });
}

一旦它到达上面代码中的Promise链的末尾,它应该将客户端重定向到新视图groups。运行应用程序时我没有收到任何错误。如何让Jade向客户端发送新视图?

是否可以渲染替换当前视图的新视图?或者我是否必须重定向页面(在客户端)?

2 个答案:

答案 0 :(得分:3)

Jade是一个模板引擎,实际上与您的问题无关。 Express处理路由,这是您用来定义加载的地方和时间加载的内容。

$.post进行AJAX通话不会重新加载您的网页(这是进行AJAX通话的主要目的)。根据您当前的代码,您需要为$.post调用添加回调,一旦收到数据,请使用AJAX调用中的HTML替换当前页面的HTML。您也可以执行window.location.href = 'new page URL here';

之类的操作

最后但并非最不重要的是,您可以在服务器上执行res.redirect,但它不会显示在当前代码中。无论您使用哪种路径加载具有该位JavaScript的页面,都需要运行相同的服务器端逻辑,然后执行res.redirect或者直接在此时使用res.render加载正确的模板。 / p>

答案 1 :(得分:2)

与迈克尔没有任何关系,正如迈克尔的回答所指出的那样。

  

是否可以渲染替换当前视图的新视图?

没有。渲染(在这种情况下)发生在服务器端。将呈现的HTML发送到客户端并且浏览器显示*它后,服务器将不再直接影响页面。

(*也称为渲染,但这与浏览器实际绘制客户端页面more details)有关 功能

在路由处理程序中执行res.render(或res.sendres.redirect)后,您可以从服务器执行的最后一件事就是影响页面,或者更一般地说,发送给客户端的响应,res.redirect中的响应只是302状态代码和位置标头。 (在同一个处理程序中发送两次响应可能会导致“已发送标头”错误)

然后改变视图就是客户所有,所以......

  

或者我是否必须为此重定向页面(在客户端)?

准确。