【发布时间】:2022-02-09 13:15:29
【问题描述】:
我正在尝试创建一个登录页面,该页面在使用 nodejs 成功登录并获取后将用户重定向回主页。 这是后端的代码。
app.post('/login',(req,res)=>
{
user.findOne(req.body,(err,info)=>{
if(err)
{
res.json(`error in finding item in database ,error info ${err}`);
}
else if(!info)
{
console.log('user doesnot exist');
let message='*please enter a valid username and password';
res.json(message);
}
else{
console.log(info);
res.redirect('/');
}
});
});
这是前端代码
form.addEventListener('submit',(e)=>{
e.preventDefault();
const username=document.getElementById('username').value.trim();
const password=document.getElementById('password').value;
fetch('/login',{
method:'POST',
headers:{
'Content-Type':'application/json'
},
redirect:"manual",
body:JSON.stringify({username,password})
}).then((res)=>{
if(res.redirected)
{
console.log(`redirected to ${res.url}`);
window.location.href=res.url;
// return;
}
else{
console.log("no")
return res.json()
}
})
.then((data)=>{
if(data)
alt.innerText=data;//showing the error on the page
})
.catch((err)=>{throw err})
})
当我输入正确的凭据时,它会在控制台上打印信息,这意味着它在 else 内,理想情况下应该重定向回主页。但它永远不会进入 if(res.redirected) 语句,这意味着它返回 false。
【问题讨论】:
-
您是否尝试过
console.log(res.redirected)值以及它返回的值..? -
@SomeoneSpecial 是的,它返回 false
-
那么它永远不会被调用。查看我的解决方案以获得更好的方法。通常最好不要以您的方式使用重定向,因为您可能会遇到意想不到的结果。例如,如果您调用
http://example.com并且它重定向到https://example.com您也会被重定向。
标签: javascript node.js express mongoose fetch-api