Javascript 试图让Jade重定向页面
客户端:Javascript 试图让Jade重定向页面,javascript,node.js,pug,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', newRespon
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);
});
});
一旦到达上面代码中承诺链的末尾,它应该将客户端重定向到一个新视图,组
。运行应用程序时,我没有收到任何错误。如何让Jade向客户发送新视图
是否可以渲染替换当前视图的新视图?或者我必须为此重定向页面(在客户端)?Jade是一个模板引擎,实际上与您的问题无关。Express处理路由,这是您用来定义在何处以及何时加载的路由 使用
$进行AJAX调用。post
不会重新加载页面(这是进行AJAX调用的主要目的)。根据当前代码,您需要向$.post
调用添加回调,一旦收到数据,就用AJAX调用中的HTML替换当前页面的HTML。您还可以执行类似于window.location.href='newpage URL here'代码>
最后但并非最不重要的一点是,您可以在服务器上执行res.redirect
,但它不会出现在显示的当前代码中。无论您使用何种途径加载页面,都需要运行相同的服务器端逻辑,然后执行res.redirect
,或者直接使用res.render
加载正确的模板。与Jade无关,正如michael的回答中所述
是否可以渲染替换当前视图的新视图
否。渲染(在本例中)发生在服务器端。一旦呈现的HTML被发送到客户端并且浏览器显示了它,服务器就不能再直接影响页面了
(*也称为渲染,但这与浏览器实际为客户端绘制页面有关,)
在路由处理程序中执行res.render
(或res.send
,res.redirect
)后,您将无法从服务器执行任何操作来影响页面,或者更一般地说,发送到客户端的响应,在res.redirect
中,客户端将只是一个302状态代码和一个位置标头。(在同一处理程序中发送两次响应可能会导致“headers ready sent”错误)
这一切都取决于客户端更改视图,所以
或者我必须为此重定向页面(在客户端)
没错
function checkToken(response){
$.post('/auth', {
id: response.authResponse.userID,
accessToken: response.authResponse.accessToken
});
}