我正在构建一个使用 JWT 进行身份验证的银行应用程序。提交登录表单后,服务器给出了响应,但由于某种原因,我无法从服务器获取数据,它一直给出未定义的信息,这很奇怪,因为我可以清楚地看到服务器正在给出响应。
这是我获取数据的方式
onClick={(event)=>{
event.preventDefault()
let user={tel, password}
fetch('http://localhost:3000/login', {
method:'POST',
headers:{'Content-Type':'application/json'},
body:JSON.stringify(user)
})
.then(response=>(response.json()))
.then(data=>localStorage.setItem('user',JSON.stringify(data)))
.then(navigate('/home'))
.then(window.location.reload)
.catch(error=>{console.log('error sending data to server')})
}}
当我不离开页面时,我可以在空白页面上看到服务器生成的令牌
当前处理 Express 服务器上的帖子的 API
app.post('/login', (req,res,next)=>{
let loginuser=req.body
console.log(loginuser)
let founduser
Account.find({tel:loginuser.tel}).exec().then(response=>{founduser=response.lastname})
if (loginuser){
Account.find({tel:loginuser.tel}, ['userpassword']).exec().then(response=>{
//New users will require bcrypt.compare() to log-in
if(response.length!== 0){
if(loginuser.password===response[0].userpassword){
console.log('found user')
res.setHeader('Access-Control-Allow-Origin', '*');
res.json({token:jwt.sign({lastname:founduser},SECRET)})
next()
}
else{
console.log('hey! check input')
res.json({errormsg:'Phone number and password mismatch'})
}}
else {
console.log('user not found')
res.json({errormsg:'User not found'})
}
})
}
})
服务器响应
{ tel: '0123456789', password: '' }
found user
浏览器控制台
error sending data to server
从上面的东西正在触发 fetch api 的错误处理程序,有人可以解释为什么会这样以及我做错了什么,非常感谢任何帮助
我已经尝试过
return fetch('')
添加setTimeout()来显示获取的数据
我正在使用 Reactjs 和 Node/express.js,ODM by mongoose
问题就在这一行:
.then(window.location.reload)
您需要将其更改为:
.then(() => window.location.reload())
then
方法需要一个函数作为参数传入。当您直接传递 window.location.reload
时,您将传入对 reload()
对象的 window.location
方法的引用。然而,then
方法需要传入一个函数,因此它尝试将window.location.reload()
作为函数调用,这会导致非法调用错误。