我正在进行 fetch 调用,并将结果存储在 res 中。当我将其转换为 json 并通过 const data = res.json(); 将其存储在变量中时它给出了一个错误。 这是我的客户端代码:
const handleLogin = async (e) =>{
e.preventDefault();
try{
dispatch(signInStart());
const res = fetch(`${URL}/api/user/login`,{
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify(user),
});
const data = await res.json();
if(data.success === false){
dispatch(signInFailure(data.message));
return;
}
dispatch(signInSuccess(data));
navigate('/upload');
} catch(error){
dispatch(signInFailure(error.message));
}
} ;
这是我的服务器端代码:
export const login = async(req,res,next) => {
const { email, password } = req.body;
try {
const validUser = await User.findOne({email});
if(!validUser) return next(errorHandler(404,"User not found!"));
const validPassword = bcryptjs.compareSync(password,validUser.password);
if(!validPassword) return next(errorHandler(401,"Wrong credentials!"));
const token = jwt.sign({id: validUser._id},process.env.JWT_SECRET);
const { password: pass, ...rest} = validUser._doc; // Excluding password from the user data we are getting
res.cookie('access_token',token,{httpOnly: true, expires:new Date(Date.now() + 25892000000)})
.status(200).json(rest) //Expires after 30 days
}catch(error) {
next(error);
}
};
我需要用户数据才能使其在所有页面上可用,但我无法解决此错误。
它就像你正在尝试使用你的承诺值。你应该像这样等待你的 fetch 调用:
const res = await fetch(`${URL}/api/user/login`,{
method: 'POST',
...,
});