从服务器获取数据时出现未定义,错误非法调用

问题描述 投票:0回答:1

我正在构建一个使用 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

reactjs forms express fetch-api
1个回答
1
投票

问题就在这一行:

 .then(window.location.reload)

您需要将其更改为:

 .then(() => window.location.reload())

then
方法需要一个函数作为参数传入。当您直接传递
window.location.reload
时,您将传入对
reload()
对象的
window.location
方法的引用。然而,
then
方法需要传入一个函数,因此它尝试将
window.location.reload()
作为函数调用,这会导致非法调用错误。

© www.soinside.com 2019 - 2024. All rights reserved.