我正在使用客户端javascript上的Fetch向使用Express Js和Firebase Auth的服务器端javascript发出POST请求。 auth()。signOut()返回200代码,但是我的代码的.then部分从不执行,因为该函数立即将响应返回给客户端提取;因此,永远不要渲染我的下一个视图。仅在执行服务器端代码的.then部分之后,如何使服务器端代码将200状态返回给客户端代码?
这是我的代码:
服务器端:
var logoutController = {
//post logout user function
logout: function(req, res, next) {
var context, view;
firebase.auth().signOut().then(function(data){
view = 'index';
context = {
error: false,
};
res.render(view, context);
}).catch(function(error) {
var errorCode = error.code;
var errorMessage = error.message;
view = 'index'; //Change to an error page
context = {
error: true,
};
res.render(view, context);
});
},
} //end logoutController
router.post("/logout", logoutController.logout);
客户端代码:
var button = document.getElementById("logoutButton");
button.addEventListener('click', function(e) {
fetch('/logout', {
method: 'POST',
headers: {
"Content-Type": "application/json"
},
})
.then(function(response) {
if(response.ok) {
return;
}
throw new Error('Request failed.');
})
.catch(function(error) {
alert(error);
});
});
答案 0 :(得分:1)
我发现的解决方案是在客户端使用:
window.location.pathname ='/'
要重定向到该页面,我希望用户注销后可以转到该页面。