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向客户端发送新视图?
是否可以渲染替换当前视图的新视图?或者我是否必须重定向页面(在客户端)?
答案 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.send
,res.redirect
)后,您可以从服务器执行的最后一件事就是影响页面,或者更一般地说,发送给客户端的响应,res.redirect
中的响应只是302状态代码和位置标头。 (在同一个处理程序中发送两次响应可能会导致“已发送标头”错误)
然后改变视图就是客户所有,所以......
或者我是否必须为此重定向页面(在客户端)?
准确。