获取 API- res.json() returns 一个 [object][object]

Fetch API- res.json() returns an [object][object]

我已经尝试了很多我找到的解决方案,但都没有成功。我在验证后获取 user 对象-

Login.jsx-

const login = async () => {
    const res = await fetch('http://localhost:8080/login', {
        method: 'POST',
        credentials: 'include',
        headers: {
            'Accept': 'application/json',
            'Content-Type': 'application/json;charset=UTF-8'
        },
        body: JSON.stringify({
            username: username,
            password: password
        })
    });
        
    const data = await res.json();
    
    console.log('data: ' + data); // [object][object]
}

routes.js

const handleLoginPost = (req, res, next) => {
    passport.authenticate('local', (err, user) => {

        if(err) {
            console.log(err);
            res.status(404).json({err});
            return;
        }

        res.status(200).json(user);
        return;

    })(req, res, next);
}

router.post('/login', handleLoginPost);

当我使用 res.text() 而不是 res.json() 时,它 returns 一个字符串对象 -

{"_id":"5f72cf2aa985f40488b2eb2b","username":"sapinder","email":"1@gmail.com","hash":"b$/7lYBHWP1Ed2VXXSIizyiOk.aujvbi2iRRrFxy6ufxu..S81oRl2u","__v":0}

这是一个字符串,因为 typeof data returns 在这种情况下是字符串。我试过 JSON.parse(data) 但又试过了 returns [object][object].

提取 user 对象的正确方法是什么?

我不确定,但试试 .then(data => console.log('data: ' + data))

试试这个

const login = async () => {
    const res = await fetch('http://localhost:8080/login', {
        method: 'POST',
        credentials: 'include',
        headers: {
            'Accept': 'application/json',
            'Content-Type': 'application/json;charset=UTF-8'
        },
        body: JSON.stringify({
            username: username,
            password: password
        })
    }).then((response) => {
    return response.json();
  }).catch((err)=>{
      console.log(err)
  });

  console.log("Res", res)
  return res;
}

改变这个:

console.log('data: ' + data) 

至此

console.log('data: ',  data) 

或对此:

console.log('data: ' + JSON.stringify(data)). 

您的 console.log() 正在触发数据的默认字符串转换。在Javascript中,对象的默认字符串转换是[Object object],这通常是无用的。您的数据在那里,只是您的 console.log() 代码在尝试输出时出错。