试图让 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.send
、res.redirect
),这将是您可以从服务器执行的最后一件事来影响页面,或者更一般地说,发送给客户端的响应,在 res.redirect
中将只是一个 302 状态代码和一个位置 header。 (在同一个处理程序中发送两次响应可能会导致 "headers already sent" 错误)
然后更改视图完全取决于客户,所以...
Or will I have to redirect the page (on the client-side) for this?
完全正确。
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.send
、res.redirect
),这将是您可以从服务器执行的最后一件事来影响页面,或者更一般地说,发送给客户端的响应,在 res.redirect
中将只是一个 302 状态代码和一个位置 header。 (在同一个处理程序中发送两次响应可能会导致 "headers already sent" 错误)
然后更改视图完全取决于客户,所以...
Or will I have to redirect the page (on the client-side) for this?
完全正确。