试图让 Jade 重定向页面

Trying to get Jade to redirect page

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 向客户发送新视图?

是否可以渲染一个新视图来替换当前视图?还是我必须为此重定向页面(在客户端)?

Jade 是一个模板引擎,实际上与您的问题没有任何关系。 Express 处理路由,这是您用来定义加载内容的位置和时间。

使用 $.post 进行 AJAX 调用不会重新加载您的页面(这是进行 AJAX 调用的主要目的)。根据您当前的代码,您需要向 $.post 调用添加回调,并且在收到数据后,将当前页面的 HTML 替换为 [=25] 中的 HTML =] 打电话。你也可以做类似 window.location.href = 'new page URL here';.

的事情

最后但同样重要的是,您可以在服务器上执行 res.redirect,但它不会出现在当前显示的代码中。无论你有什么路线加载页面 JavaScript 需要代替 运行 相同的 server-side 逻辑,然后执行 res.redirect 或者直接加载正确的模板res.render 那时。

正如迈克尔的回答中所述,与 Jade 无关。

Is it possible to render a new view that replaces the current view?

没有。渲染(在本例中)发生在 server-side。一旦呈现的 HTML 被发送到客户端并且浏览器显示*它,服务器就不能再直接影响页面。

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

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

然后更改视图完全取决于客户,所以...

Or will I have to redirect the page (on the client-side) for this?

完全正确。